繁体   English   中英

WebBrowser启动Internet Explorer

[英]WebBrowser launch internet explorer

我正在尝试从URL中解析包含很多Javascript生成内容的内容,为此我正在使用WebBrowser控件。 最初,在同一对象的实例中加载目标URL列表的所有URL时,我遇到很多问题,因此我决定每隔几个请求就处理一次对象,然后创建一个新的实例,依此类推。 我现在面临的问题是,有时,当我处理该对象时,它会打开一个新的IE浏览器窗口,与我的应用程序无关,并加载我已经处理过的对象的url。 这是我的代码:

我在这篇文章中看到了类似的答案,但是它对我不起作用。

为什么有时WebBrowser.Dispose()启动Internet Explorer?

private void TriggerNavigation ()
    {
        if (urlList.Count > 0)
        {
            progressBar1.Value++;                
            if (LoopUrls++ >= 1)
            {
                URL = string.Empty;
                LoopUrls = 0;
                timerAjaxLoad.Stop();                    
                webBrowser1.Stop();
                webBrowser1.AllowNavigation = false;                    
                webBrowser1.Dispose();
                webBrowser1 = null;                    
                GC.Collect();                                   
                webBrowser1 = new WebBrowser();
            }

            URL = urlList.First();
            label1.Text = "Processing.." + URL;                                
            webBrowser1.ScriptErrorsSuppressed = true;                
            webBrowser1.Navigate(URL);                
            webBrowser1.Navigating += webBrowser1_Navigating;
            timerAjaxLoad.Start();
            urlList.RemoveAt(0);
        }
        else
        {
            timerAjaxLoad.Stop();
        }            
    }

更新:

我弄清楚是什么原因引起的。 并非所有页面都发生这种情况,而是仅发生在某些触发了外部页面的嵌入式JS中。 通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。

void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
    {
        foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
        {
            if (x.OuterHtml.Contains("survey"))
                e.Cancel = true;
        }
        foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
        {
            e.Cancel = true;
        }

    }  

我弄清楚是什么原因引起的。 并非所有页面都发生这种情况,而是仅发生在某些触发了外部页面的嵌入式JS中。 通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。

void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
    {
        foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
        {
            if (x.OuterHtml.Contains("survey"))
                e.Cancel = true;
        }
        foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
        {
            e.Cancel = true;
        }

    }  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM