2014-05-08 96 views
0

我試圖從URL中解析包含大量Javascript生成內容的內容,爲此我使用WebBrowser控件。最初,當我在對象的同一個實例中加載目標網址列表的所有url時,我遇到了很多問題,因此我決定每隔幾個請求處理一個對象,然後創建一個新實例等等。我現在面臨的問題是,有時,當我處理對象時,它會打開一個新的IE瀏覽器窗口,與我的應用程序無關,加載已經處理的對象的url。這裏是我的代碼:WebBrowser啓動Internet Explorer

我在這篇文章中看到了類似的答案,但它不適合我。

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(); 
     }    
    } 

UPDATE:

我想通了什麼導致了問題。這並不是針對所有頁面發生的,而只針對一些嵌入式JS觸發外部頁面。通過捕獲Navigating事件並取消對該頁面的腳本調用,它解決了這個問題。

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; 
     } 

    } 

回答

0

我想清楚是什麼導致了這個問題。這並不是針對所有頁面發生的,而只針對一些嵌入式JS觸發外部頁面。通過捕獲Navigating事件並取消對該頁面的腳本調用,它解決了這個問題。

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; 
     } 

    } 
+0

你可以接受你自己的答案。 –

相關問題