WebBrowser启动Internet Explorer

时间:2014-05-08 07:31:51

标签: c# .net internet-explorer webbrowser-control

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

我在这篇文章中看到了类似的答案,但它并不适合我。

Why is sometimes WebBrowser.Dispose() launching 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;
        }

    }  

1 个答案:

答案 0 :(得分:0)

我弄清楚是什么导致了这个问题。所有页面都没有发生这种情况,但仅适用于触发外部页面的嵌入式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;
        }

    }