2012-09-13 72 views
5

在VS 2010中使用webbrowser控件開發Windows Forms應用程序。 我的目標是在這個網站上自動導航,但是當我在某個點上時,網站會彈出一個JavaScript警報,這將停止自動化,直到我按下OK按鈕。 我有點解決了這個問題,通過模擬輸入按下時彈出,但應用程序應該保持專注,以便它的工作。 我的問題是,有沒有什麼辦法可以從網站上殺死這個自定義的javascript警報(我沒有訪問到一邊,從客戶端殺死它),所以它沒有顯示或任何其他方式來解決這個問題? 顯示的javascript警報(messagebox)不是錯誤,是由於某種原因該網站的程序員放在那裏的JavaScript警報。webBrowser控制停止來自網站的JavaScript警報

+1

有點谷歌搜索發現:http://josheinstein.com/blog/index.php/2010/01/webbrowser-control-prevent-window-alert/ –

回答

0

您可以嘗試在頁面加載之前使用Navigated事件並攔截DocumentText以刪除alert(...);引用。

Navigated頁面上的MSDN:

處理的Navigated事件時接收通知的WebBrowser控制導航到一個新的文檔。發生Navigated事件時,新文檔已開始加載,這意味着您可以通過DocumentDocumentTextDocumentStream屬性訪問加載的內容。

下面是一些代碼:

using System.Windows.Forms; 
using System.Text.RegularExpressions; 

namespace Your.App 
{ 
    public class PopupSuppress 
    { 
     WebBrowser _wb; 
     public PopupSupress() 
     { 
      _wb = new WebBrowser(); 
      _wb.Navigated += new WebBrowserNavigatedEventHandler(_wb_Navigated); 
     } 

     void _wb_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
     { 
      string alertRegexPattern = "alert\\([\\s\\S]*\\);"; 
      //make sure to only write to _wb.DocumentText if there is a change. 
      //This will prompt a reloading of the page (and another 'Navigated' event) [see MSDN link] 
      if(Regex.IsMatch(_wb.DocumentText, alertRegexPattern)) 
       _wb.DocumentText = Regex.Replace(_wb.DocumentText, alertRegexPattern, string.Empty); 
     } 
    } 
} 

來源/資源: