【问题标题】:Disable Javascript popups when using Windows.Forms.Webbrowser.Navigate()使用 Windows.Forms.Webbrowser.Navigate() 时禁用 Javascript 弹出窗口
【发布时间】:2009-04-25 18:35:33
【问题描述】:

好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行 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>

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    void webBrowser1_NewWindow(object sender, CancelEventArgs e)
    {
        e.Cancel = true;
    }
    

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

    【讨论】:

    • 哇,我现在要试试这个。这看起来很有希望,并且有“duh”因素。好的,我只测试了 15 次,效果很好!我心中的一个特殊位置现在留给你善良的陌生人。
    【解决方案2】:

    你能在文档中注入 Javascript 吗?你可以添加这个:

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

    【讨论】:

    • 说到 Javascript,我真的很蹩脚。我什至没有意识到你可以注入 Javascript。如果是这样的话,我什至可能不必走我现在要去的路线。感谢您的评论,我会调查的。
    【解决方案3】:

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

    【讨论】:

    • 我想我尝试过这种方法,之后我尝试在 Stream 中加载 html,但没有任何运气。我不知道我必须进一步研究 WebClient,我尝试使用 HttpWebRequest/WebResponse 做你提到的事情。谢谢
    【解决方案4】:

    您应该尝试使用 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();
            }
    

    再见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2012-02-07
      • 1970-01-01
      相关资源
      最近更新 更多