Webbrowser控件判斷網頁加載完畢的簡單方法


一般情況下,當ReadyState屬性變成READYSTATE_COMPLETE 時,Webbrowser控件會通過觸發DocumentCompleted事件來指示網頁加載完畢。但當加載的網頁包含frame時,可能會多次觸發該 事件,所以不能簡單地通過它來判斷網頁加載完畢。

從微軟的官方網站上了解到,並非每個frame都對應了一個 DocumentCompleted事件,只有觸發了DownloadBegin事件的frame才會有相應的DocumentCompleted事件。 另外,最外層的frame總是最后觸發DocumentCompleted事件。DocumentCompleted事件具有一個IDispatch *類型的參數,它指示了是在哪個frame上觸發的該事件。所以,要判斷文檔是否加載完畢,只需要判斷IDispatch *參數是否是Webbrowser控件的IDispatch。

微軟support網站上關於這個問題的說明:
http://support.microsoft.com/?scid=kb%3Ben-us%3B180366&x=9&y=14

這個方法用到了COM相關的知識,在沒有現成代碼的情況下,對於像我這樣從.NET開始進入 Windows平台的程序員來講理解和實現起來都有一定的難度。尤其是.NET 2.0下的Webbrowser控件是對Webbrowser COM組件的不完全封裝,我在考察.NET 2.0 Webbrowser的WebBrowserDocumentCompletedEventArgs后並未發現有IDispatch參數或相關參數。不知 道是不是在封裝過程中被省去了。

希望哪位高手能告訴我如何用C#實現上面的方法,先在此謝過!不過,利用前面提到的最外層的frame總是最后觸發DocumentCompleted事件,還有一種更為簡單的方法:

1. 引入一個計數器變量,初始值為0;
2. 當Webbrowser控件的DownloadBegin (.NET 2.0中的Navigated)事件發生時對計數器加一;
3. 當Webbrowser控件的DownloadCompleted事件發生時對計數器減一;
4. 計數器減為0說明文檔加載完畢

主要代碼:

 

// 計數器
int  counter  =   0 ;

	// 添加事件響應函數
this .webBrowser.Navigated  +=   new  System.Windows.Forms.WebBrowserNavigatedEventHandler(webBrowser_Navigated);

this .webBrowser.DocumentCompleted  +=   new  System.Windows.Forms.WebBrowserDocumentCompletedEventHandler( this .webBrowser_DocumentCompleted);

// 事件響應函數
private   void  webBrowser_Navigated( object  sender, WebBrowserNavigatedEventArgs e)
{
    counter ++ ;
}

private   void  webBrowser_DocumentCompleted( object  sender, WebBrowserDocumentCompletedEventArgs e)
{
    counter -- ;

     if  ( 0   ==  counter)
     {
      // 加載完畢
    }
} 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM