User Tools

Site Tools


Action disabled: source
blog:2025-03-14-001



2025-03-14 C# Winform WebBrowser

  • Question:
    • c# Winform webbrowser 元件中所載入的 HTML內含 onclick event如下
      <input style="border-width: 0px;" 
      onclick="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView3','Select$0');return false;" 
      type="image" 
      alt="選取" 
      src="App_image/profile.gif">
  • 但是卻呼叫出 IE視窗,這是發生甚麼事,如何捕獲該Event並將結果導向另一個 webBrowser 元件中

AI Answer

  • 在 C# WinForms 的 WebBrowser 控制項中,當你遇到 onclick 事件導致開啟 IE 瀏覽器的情況,通常是因為該事件觸發了一個需要在新窗口中打開的 JavaScript 函數。這可能是因為 __doPostBack 函數的行為不在 WebBrowser 控制項的範疇內。

解決方案

  • 你可以透過以下步驟來捕獲這個事件並將結果導向另一個 WebBrowser 控制項中:
    • 監聽 WebBrowser 的 Navigating 事件:這個事件可以幫助你攔截導航請求。
    • 使用 WebBrowser.Navigate 方法:在攔截事件中,你可以手動導航到指定的 URL,而不是讓它打開 IE 瀏覽器。

範例程式碼

  • 以下是示範如何實現這個功能的程式碼:
  • using System;
    using System.Windows.Forms;
    
    public class MainForm : Form
    {
        private WebBrowser webBrowser1;
        private WebBrowser webBrowser2;
    
        public MainForm()
        {
            webBrowser1 = new WebBrowser();
            webBrowser2 = new WebBrowser();
    
            webBrowser1.Dock = DockStyle.Top;
            webBrowser2.Dock = DockStyle.Bottom;
    
            webBrowser1.Navigating += WebBrowser1_Navigating;
    
            this.Controls.Add(webBrowser1);
            this.Controls.Add(webBrowser2);
    
            // 載入初始網頁
            webBrowser1.Navigate("你的網頁地址");
        }
    
        private void WebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            // 檢查 URL 是否包含特定的參數或模式
            if (e.Url.ToString().Contains("ctl00$ContentPlaceHolder1$GridView3"))
            {
                // 攔截導航並將結果導向另一個 WebBrowser
                e.Cancel = true; // 取消當前導航
                webBrowser2.Navigate(e.Url); // 將 URL 導向第二個 WebBrowser
            }
        }
    
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MainForm());
        }
    }
  • 說明
    • WebBrowser 控制項:我們創建了兩個 WebBrowser 控制項,webBrowser1 用來載入原始網頁,webBrowser2 用來顯示攔截後的內容。
    • Navigating 事件:當 webBrowser1 嘗試導航時,我們檢查 URL 是否符合我們的條件。如果符合,我們取消導航並將 URL 導向 webBrowser2。
    • e.Cancel = true:這行代碼取消了原本的導航請求,防止 IE 瀏覽器的開啟。
    • 這樣你就可以捕獲 onclick 事件並將結果顯示在另一個 WebBrowser 控制項中。

TAGS

  • 58 person(s) visited this page until now.

blog/2025-03-14-001.txt · Last modified: 2025/03/14 14:37 (external edit)