webBrowser控制从网站停止javascript警报

时间:2012-09-13 14:11:18

标签: c# javascript

我正在使用webbrowser控件在VS 2010 C#中开发Windows窗体应用程序。 我的目标是在这个网站中自动导航,但是当我在某一点上时,网站将弹出一个javascript警报,这将停止自动化直到我按下OK按钮。 我有点通过在弹出时模拟输入按钮来解决问题,但是应用程序应该保持专注以使其工作。 我的问题是,有没有办法从网站上杀死这个自定义的JavaScript警报(我没有访问方,从客户端杀死它)所以它没有显示或任何其他方法来解决这个问题? 显示的javascript警报(消息框)不是错误,是由于某种原因该网站的程序员放置的javascript警报。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Navigated事件并在加载页面之前拦截DocumentText以删除alert(...);引用。

来自MSDN上的Navigated页:

  

处理Navigated事件,以便在WebBrowser控件导航到新文档时收到通知。发生Navigated事件时,新文档已开始加载,这意味着您可以通过DocumentDocumentTextDocumentStream属性访问加载的内容。

以下是一些代码:

using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Your.App
{
    public class PopupSuppress
    {
        WebBrowser _wb;
        public PopupSupress()
        {
            _wb = new WebBrowser();
            _wb.Navigated += new WebBrowserNavigatedEventHandler(_wb_Navigated);
        }

        void _wb_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            string alertRegexPattern = "alert\\([\\s\\S]*\\);";
            //make sure to only write to _wb.DocumentText if there is a change.
            //This will prompt a reloading of the page (and another 'Navigated' event) [see MSDN link]
            if(Regex.IsMatch(_wb.DocumentText, alertRegexPattern))
                _wb.DocumentText = Regex.Replace(_wb.DocumentText, alertRegexPattern, string.Empty);
        }
    }
}

源头/资源: