在.NET webbrowser控件中禁止“你确定要离开此页面”弹出窗口

我有一个用WinForms C#编写的Web浏览器自动化项目。 在导航过程中,浏览器会指出“您确定要离开此页面吗?” 弹出。 我们需要这个弹出窗口,所以我无法从网站代码中删除它,这意味着我必须在我的自动化应用程序中覆盖它。

有谁知道如何做到这一点?

这是顺利的解决方案..

添加对mshtml的引用并使用mshtml添加;

Browser.Navigated += new WebBrowserNavigatedEventHandler( (object sender, WebBrowserNavigatedEventArgs args) => { Action 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) { }; } ); 

您是否可以对网站代码进行任何更改?

如果是这样,你可能会看看通过ObjectForScripting公开一个对象,然后在决定显示弹出窗口之前让网站代码检查window.external (并可能询问你的对象) – 所以如果它找不到你的对象,它会认为它是正常使用并显示它。

不再需要添加了。 试试吧。 像魅力一样工作。 ^ _ ^

 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"); }