<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    weidagang2046的專欄

    物格而后知致
    隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
    數據加載中……

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

    2007-03-04

    一般情況下,當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)
    ????
    {
    ?????
    // 加載完畢

    ????}

    }

    posted on 2007-03-04 22:10 weidagang2046 閱讀(28051) 評論(12)  編輯  收藏

    評論

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    謝謝,相當有幫助。
    2007-04-10 09:48 | calf

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    看樣子也是一位能人呀!
    2007-05-06 20:39 | QQ

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    看到一個方法
    是在DocumentCompleted事件中判斷e.Url和WebBrowser.Document.Url是否一致
    如一致則表示初始頁面加載完畢
    2007-07-11 14:45 | 鋼盅郭子

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    說錯了,應該是——
    判斷e.Url和WebBrowser.Document.Url
    2007-07-11 14:50 | 鋼盅郭子

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    if (e == wb1.ControlInterface) then
    ....
    2008-06-10 16:48 | shappy

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    如果頁面中有JS加載大量數據的話,判斷e.Url和WebBrowser.Document.Url 也不好使啊,怎么辦呢?
    2008-08-07 10:57 |

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    完全是胡扯
    2008-12-11 14:30 | 木木木木

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    有ifame,網址一樣好使嗎?
    2009-02-24 19:56 | 12222222

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    這些都是針對WebBrowser的。我是用網上下載的ExWebBrowser控件,結果刷新時,DocumentCompleted獲取不到事件,但如果里面有iframe,則DocumentCompleted響應的是iframe的,因我是動態加載iframe,所以DocumentCompleted事件獲取的e.url都是空,應該是此控件的問題,上述方法對此控件無效。針對此問題,采用一個簡單的計數器,做if/else判斷,然后通過 += 和 -= 來防止事件被注冊多次...
    2009-03-10 14:17 | TT

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    private void webBrowser_Navigated( object sender, WebBrowserNavigatedEventArgs e)
    {
    counter ++ ;
    }

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

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

    事情總不是那么簡單。。。如果他是先執行完webBrowser_Navigated 再執行webBrowser_DocumentCompleted那就沒問題。。但事實好像不是這樣的。
    webBrowser_Navigated 執行后
    就會執行webBrowser_DocumentCompleted
    然后又執行webBrowser_Navigated
    再執行webBrowser_DocumentCompleted
    而去webBrowser_Navigated 的counter++最后未必等于
    webBrowser_DocumentCompleted 的counter--

    2010-04-20 23:51 | 不懂技術的路人甲

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    @鋼盅郭子
    很對 真的 這個 最好!!!
    2013-07-05 17:51 | 心碎烏托邦

    # re: Webbrowser控件判斷網頁加載完畢的簡單方法  回復  更多評論   

    有跳轉就不好事了。
    2013-12-21 09:59 | 孔凡星

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 最近免费中文在线视频| 久别的草原电视剧免费观看| 日韩吃奶摸下AA片免费观看| 亚洲欧洲日本精品| 最近免费中文在线视频| 亚洲va乱码一区二区三区| 免费做爰猛烈吃奶摸视频在线观看 | 国产亚洲一区区二区在线| 国产特黄一级一片免费| 亚洲亚洲人成综合网络| 国产午夜精品久久久久免费视| 亚洲AV日韩AV永久无码久久| 91大神免费观看| 亚洲综合一区二区三区四区五区| 妞干网免费视频在线观看| 老司机午夜在线视频免费观| 国产国拍亚洲精品福利| 人妻无码一区二区三区免费| 亚洲天堂2017无码中文| www.亚洲精品| 日韩精品无码免费一区二区三区 | 亚洲欧美国产日韩av野草社区| 免费观看男人免费桶女人视频| 色欲色欲天天天www亚洲伊| 久久乐国产精品亚洲综合| 日本高清高色视频免费| 一区二区亚洲精品精华液 | 久久精品国产亚洲av四虎| 999久久久免费精品国产| 久久久久久亚洲av无码蜜芽| 亚洲五月午夜免费在线视频| 日本免费一区二区三区四区五六区| 亚洲国产成人精品激情| 亚洲?v无码国产在丝袜线观看| 免费h视频在线观看| 亚洲国产欧美日韩精品一区二区三区| 亚洲午夜AV无码专区在线播放 | 国产成人亚洲午夜电影| 亚洲国产第一页www| 四虎永久在线精品免费影视| 一区二区三区四区免费视频|