使用Windows.Forms.Webbrowser.Navigate()时禁用Javascript弹出窗口

时间:2009-04-25 18:35:34

标签: .net javascript popup webbrowser-control console-application

好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行javascript才能获得我想要的信息。

Form f = new Form();
WebBrowser w = new WebBrowser();
w.Navigate(url);
f.Controls.Add(w);
f.ShowDialog();
HtmlElementCollection hc = w.Document.GetElementsByTagName("button");

这有效,我可以将按钮元素设置得很好,但每次运行时我都会弹出一个弹出窗口。很烦人。弹出窗口是基于javascript的,我需要运行Javascript来获取按钮元素信息。这是弹出窗口的脚本。

<script>
var evilPopup = (getCookieVar("markOpen","PromoPop") == 1);
if (evilPopup != 1) 
{
    PromoPop = window.open('/browse/info.aspx?cid=36193','Advertisement', 'width=365,height=262,screenX=100,screenY=100');

if (PromoPop) 
    {
       PromoPop.blur();
       window.focus();
       setCookieVar("markOpen","PromoPop","1");             
    }
}
</script>

我在风向标中试图将一个cookie添加到Forms.Webbrowser控件中但却感到沮丧并放弃了。我尝试设置NoAllowNavagate属性,其他一切都无济于事。

有人可以帮忙吗?另外,有一种方法可以从Console.App获取DomDocument信息而无需打开表单吗?

由于

4 个答案:

答案 0 :(得分:6)

WebBrowser组件具有带有CancelEventArgs的NewWindow事件。所以只需添加一个类似于:

的处理程序
void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
    e.Cancel = true;
}

当javascript尝试打开弹出窗口时,事件会被触发并取消它。

答案 1 :(得分:0)

您可以将Javascript注入文档吗?你可以添加这个:

window.open = function() { return false; }

答案 2 :(得分:0)

快速而肮脏的解决方案是使用WebClient将html下载到临时文件,用string.Empty替换广告脚本并在控件中加载文件。

答案 3 :(得分:0)

你应该尝试SHDocVw.dll来自动捕捉新窗口。

        private SHDocVw.WebBrowser_V1 Web_V1;

        // write it on form load event

        Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;

        Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);


        private void Web_V1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
        {
            Processed = true; //Stop event from being processed

            //Code to open in same window
            //this.webBrowser1.Navigate(URL);

            //Code to open in new window instead of same window
            frmEBeyanname Popup = new frmEBeyanname();
            Popup.webBrowser1.Navigate(URL);
            Popup.Show();
        }

再见