我有一个.NET 2.0 WebBrowser控件,用于在没有用户交互的情况下导航一些页面(不要使用ask...long故事)。由于此应用程序的无用户特性,我已将WebBrowser控件的ScriptErrorsSuppressed属性设置为true,VS 2005中包含的文档将...“隐藏其源自基础ActiveX控件的所有对话框,而不仅仅是脚本错误。”然而,MSDN article并没有提到这一点。我已经设法取消了防止弹出窗口的NewWindow事件,所以这件事已经处理好了。
有没有人有使用其中一个并成功阻止所有对话框、脚本错误等的经验?
编辑
这不是IE的独立实例,而是Windows窗体应用程序上的WebBrowser控件的实例。任何人都有使用此控件或基础控件AxSHDocVW的经验
再次编辑
抱歉我忘了提这件事..。我正在尝试阻止一个只有一个OK按钮的JavaScript ()警告。也许我可以转换成一个IHTMLDocument2对象并以这种方式访问脚本,我已经使用了一点,有人知道吗?
发布于 2008-09-19 12:58:18
这绝对是老生常谈,但如果您使用WebBrowser控件做任何工作,您会发现自己做了很多老生常谈的事情。
这是我所知道的最简单的方法。您需要注入JavaScript来覆盖警报函数...类似于注入这个JavaScript函数:
window.alert = function () { }
有很多方法可以做到这一点,但这是非常可能的。一种可能是挂接DWebBrowserEvents2接口的实现。完成此操作后,您可以插入NavigateComplete、DownloadComplete或DocumentComplete (或者,正如我们所做的那样,插入它们的一些变体),然后调用您实现的InjectJavaScript方法,该方法执行对window.alert方法的覆盖。
就像我说的,这很麻烦,但它是有效的:)
如果需要,我可以深入了解更多细节。
发布于 2008-10-30 19:53:47
要获得注入javascript这一神奇代码的简便方法,请阅读how to inject javascript into webbrowser control。
或者只需使用以下完整代码:
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);
}
发布于 2008-09-21 02:25:54
您可能需要定制一些东西,查看一下IDocHostUIHandler
,然后查看一些其他相关的接口。你可以有相当多的控制,甚至到了自定义对话框显示/ui的程度(我记不起是哪个界面做了这件事)。我非常肯定您可以做您想做的事情,但这确实需要在MSHTML
的内部做些工作,并能够实现各种COM
接口。
其他一些想法:http://msdn.microsoft.com/en-us/library/aa770041.aspx
IHostDialogHelper
IDocHostShowUI
这些可能是您正在考虑实现的东西。
https://stackoverflow.com/questions/77659
复制相似问题