webBrowser載入網頁機制-網頁加載是否完畢判斷


    根據Browser_DocumentCompleted,Browser_Navigated,Browser_Navigating這三個消息來判斷的,用什么計數器啦,還有判斷IsBusy,StatusText等。。以上或多或少對於一些網頁是可行的,對於另一些網頁卻又有另外的意外,所以總的來說,都不能通用准確判斷,查找許多資料發現wenbbrowser來自於EXwenbbrowser,然而微軟在封裝之后把其精簡了很多東西,本人費勁苦心找到國外牛人封裝的擴展wenbbrowser(http://www.codeproject.com/Articles/13598/Extended-NET-2-0-WebBrowser-Control),加以修改后可完美解決,此在此擴展版,可以找本人索取。

 

   WebBrowser的工作機制大概是這樣的,在url上打上www.163.com,這時候,WebBrowser會開始裝載www.163.com這個網頁,觸發一個Browser_Navigating,ReadyState置為非Complete,IsBusy置為true,StatusText置為"請求的url內容",這個文檔完畢后,觸發一個Browser_DocumentCompleted,同時,ReadyState置為Complete,IsBusy置為false,StatusText置為"完成",如果通常都會有frame,如www.163.com/kk.jsp#fsd什么的,WebBrower就會觸發Browser_Navigating,ReadyState置為非Complete,IsBusy置為true,StatusText置為"請求的url內容",再去裝載那個frame,完畢后,觸發一個Browser_DocumentCompleted,同時,ReadyState置為Complete,IsBusy置為false,StatusText置為"完成",剩下的frame,余次類推。

因此,可以重新封裝 webbrowser控件完美解決多次調用加載完畢方法而正確判斷是否最好加載完畢

繼承控件,添加屬性

private bool _AllComplete;

//是否完成
public bool AllComplete
{
    get
    {
        return _AllComplete;
    }
    private set
    {
        _AllComplete = value;
    }
}

重寫Navigate

 

/// <summary>
/// 同Navigate方法,為了能判斷是否加載完成加入AllComplete初始化
/// </summary>
/// <param name="urlString"></param>
public void Open(string urlString)
{
    this.AllComplete = false;
    this.Navigate(urlString);
}
加載完畢事件添加完畢修改屬性即可
使用中只需判斷AllComplete屬性

測試通過,屢試不爽!


免責聲明!

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



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