在webbrowser c#control中停止警告javascript弹出窗口

时间:2010-10-03 04:41:17

标签: c# javascript browser alert

本网站: http://blog.joins.com/media/folderListSlide.asp?uid=ddatk&folder=3&list_id=9960150

有这段代码:

<script>alert('¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.');</script>

所以我的网页浏览器控件显示弹出窗口,如何在不使用sendkeys输入的情况下绕过弹出窗口?

6 个答案:

答案 0 :(得分:5)

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.mshtmluse mshtml;的引用。

答案 1 :(得分:4)

如果您打算不在页面上使用alert()功能,您也可以覆盖它。 E.g:

<script type="text/javascript">
alert = function(){}
</script>

如果你确实需要使用JavaScript的警报功能,你可以'重载'它:

<script type="text/javascript">
var fnAlert = alert;
alert = function(message,doshow) {
    if (doshow === true) {
        fnAlert(message);
    }
}
alert("You won't see this");
alert("You will see this",true);
</script>

答案 2 :(得分:4)

处理IDocHostShowUI :: ShowMessage并返回S_OK。 请查看http://www.codeproject.com/KB/miscctrl/csEXWB.aspx以获取示例。

答案 3 :(得分:2)

给出的解决方案是错误的

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

似乎处理消息的窗口挂钩是解决方案

答案 4 :(得分:1)

我认为您在WinForm应用程序中使用alert(xxx)在其javascript中导航页面WebBroswer?你可以尝试:

broswer.Navigated += (sender, args) =>
  {
     var document = (sender as WebBrowser).DocumentText;
     //find the alert scripts and remove/replace them
  }

答案 5 :(得分:-1)

您可以通过设置

来禁用所有弹出窗口
webBrowser.ScriptErrorsSuppressed = true;

尽管有这个名字,但这个设置实际上阻止了所有弹出窗口,包括alert()