2012-04-27 37 views
0

我有一個用WinForms C#編寫的Web瀏覽器自動化項目。 導航過程中,瀏覽器執行「你確定要離開這個頁面嗎?」彈出。 我們需要這個彈出窗口,所以我不能從網站代碼中刪除它,這意味着我必須在我的自動化應用程序中覆蓋它。在.NET瀏覽器控件中禁止彈出「你確定要離開這個頁面」

有沒有人有一個想法如何做到這一點?

+0

好吧,我解決它由具有後臺線程沉睡AA秒,然後做一個sendkeys.sendwait(「{ENTER}」) 不完全是光滑的,但它的工作原理.. – ploink 2012-04-27 10:34:59

回答

0

你能製作任何對網站代碼的更改嗎?

如果是這樣,你可能看通過ObjectForScripting露出一個對象,然後將其網站代碼檢查window.external(也可能是您的詢問對象),它決定以顯示彈出式前 - 因此,如果不能找到你的對象,它假定它正在正常使用並顯示它。

+0

無遺憾的是IM不允許改變任何東西(企業官僚) – ploink 2012-04-27 10:14:53

+0

http://stackoverflow.com/questions/1495944/webbrowser-control-limitations 在這個問題中提到它是可能的但不是如何 – ploink 2012-04-27 10:15:24

2

和這裏是光滑溶液..

添加引用MSHTML並添加使用MSHTML;

Browser.Navigated += 
    new WebBrowserNavigatedEventHandler( 
     (object sender, WebBrowserNavigatedEventArgs args) => { 
      Action<HtmlDocument> blockAlerts = (HtmlDocument d) => { 
       HtmlElement h = d.GetElementsByTagName("head")[0]; 
       HtmlElement s = d.CreateElement("script"); 
       IHTMLScriptElement e = (IHTMLScriptElement)s.DomElement; 
       e.text = "window.alert=function(){};"; 
       h.AppendChild(s); 
      }; 
      WebBrowser b = sender as WebBrowser; 
      blockAlerts(b.Document); 
      for (int i = 0; i < b.Document.Window.Frames.Count; i++) 
       try { blockAlerts(b.Document.Window.Frames[i].Document); } 
       catch (Exception) { }; 
     } 
    ); 
+0

我已經提供了一個答案這在我對某個問題的迴應之一(我是編寫「WebBrowser控制限制」的人)。如果我可能會問,你的應用的目的是什麼? – 2013-07-21 06:58:08

+0

另外,你是否發現我的答案與window.alert = function(){};在其中還是有其他人寫了這個呢? – 2013-07-21 06:59:30

0

不需要再添加。嘗試一下。像魅力一樣工作。^_^

private void webNavigated(object sender, WebBrowserNavigatedEventArgs e) 
    { 
     HtmlDocument doc = webBrowser.Document; 
     HtmlElement head = doc.GetElementsByTagName("head")[0]; 
     HtmlElement s = doc.CreateElement("script"); 
     s.SetAttribute("text", "function cancelOut() { window.onbeforeunload = null; window.alert = function() { }; window.confirm=function() { }}"); 
     head.AppendChild(s); 
     webBrowser.Document.InvokeScript("cancelOut"); 
    } 
相關問題