在webbrowser c#control中停止警告javascript弹出窗口
本网站: http : //blog.joins.com/media/folderListSlide.asp?uid = ddatk&folder = 3&list_id = 9960150
有这个代码:
alert('¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.');
所以我的网页浏览器控件显示弹出窗口,如何在不使用sendkeys输入的情况下绕过弹出窗口?
在ProgressChanged
事件处理程序中,您插入一个脚本元素,该脚本元素用您自己的函数替换Javascript alert
函数,它不执行任何操作:
private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) { if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) { HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; string alertBlocker = "window.alert = function () { }"; element.text = alertBlocker; head.AppendChild(scriptEl); } }
为此,您需要添加对Microsoft.mshtml
的引用并use mshtml;
在你的forms。
如果您打算不在页面上使用alert()
函数,您也可以覆盖它。 例如:
如果你确实需要使用JavaScript的警报function,你可以“重载”它:
处理IDocHostShowUI :: ShowMessage并返回S_OK。 有关示例,请访问http://www.codeproject.com/KB/miscctrl/csEXWB.aspx 。
解决方案是错误的
private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) { if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) { HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; string alertBlocker = "window.alert = function () { }"; element.text = alertBlocker; head.AppendChild(scriptEl); } }
似乎处理Windows挂钩的消息是解决方案
我认为你在WinForm应用程序中使用WebBroswer
在javascript中使用alert(xxx)
导航页面? 你可以试试:
broswer.Navigated += (sender, args) => { var document = (sender as WebBrowser).DocumentText; //find the alert scripts and remove/replace them }
您可以通过设置禁用所有弹出窗口
webBrowser.ScriptErrorsSuppressed = true;
尽管名称,这个设置实际上阻止所有弹出窗口,包括alert()