在.NET WebBrowser控件中如何阻止对话框?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (206)

我有一个.NET 2.0 WebBrowser控件,用于在没有用户交互的情况下导航某些页面(不要询问...长篇故事)。由于此应用程序的用户较少性质,我已将WebBrowser控件的ScriptErrorsSuppressed属性设置为true,VS2005状态中包含的文档将“隐藏所有源自底层ActiveX控件的对话框,不只是脚本错误。“ 但是,MSDN文章没有提到这一点。我设法取消了防止弹出窗口的NewWindow事件,所以这已经被处理了。

任何人都有使用其中之一的经验,并成功阻止所有对话框,脚本错误等?

这不是IE的独立实例,而是生活在Windows Form应用程序上的WebBrowser控件的实例。任何人都可以使用这个控件,或者底层的控件AxSHDocVW

我忘了提及这一点...我试图阻止JavaScript警报(),只需一个确定按钮。也许我可以投入IHTMLDocument2对象并以这种方式访问​​脚本,我已经使用了MSHTML,有人知道吗?

提问于
用户回答回答于

这绝对是不吉利的,但如果你使用WebBrowser控件做任何工作,你会发现自己做了很多黑客事情。

这是我知道要做到这一点的最简单的方法。需要注入JavaScript来覆盖警报函数......沿着注入JavaScript函数的方向:

window.alert = function () { }

很多方法可以做到这一点,但这是很有可能的。一种可能性是钩住DWebBrowserEvents2接口的实现。完成此操作后,可以插入NavigateComplete,DownloadComplete或DocumentComplete(或者像我们这样做的一些变体),然后调用实现的InjectJavaScript方法,该方法执行此window.alert的重写方法。

用户回答回答于

使用这个完整的代码:

private void InjectAlertBlocker() {
    HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
    HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
    string alertBlocker = "window.alert = function () { }";
    scriptEl.SetAttribute("text", alertBlocker);
    head.AppendChild(scriptEl);
}

扫码关注云+社区

领取腾讯云代金券