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

时间:2012-04-27 10:05:26

标签: c# winforms webbrowser-control

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

有没有人知道如何做到这一点?

3 个答案:

答案 0 :(得分: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) { }; 
        } 
    ); 

答案 1 :(得分:0)

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

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

答案 2 :(得分: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");
    }