<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 | 孔凡星

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲高清在线视频| 国产成人亚洲影院在线观看| 亚洲国产高清在线| 日本三级在线观看免费| 亚洲自偷自偷在线制服| 久久免费99精品国产自在现线| 亚洲伊人成无码综合网| 四虎影视永久在线精品免费| 亚洲成a人一区二区三区| 国产成人无码免费网站| 亚洲永久精品ww47| 久久午夜夜伦鲁鲁片免费无码| 久久综合九九亚洲一区| 99久久免费观看| 亚洲人成影院在线高清| 日本免费一区二区三区最新| 免费无码国产在线观国内自拍中文字幕| 亚洲第一成人影院| 免费在线看黄的网站| 日韩精品亚洲人成在线观看| 91网站免费观看| 美女18毛片免费视频| 亚洲国产精品一区二区第一页免| 99精品视频免费| 亚洲国产午夜精品理论片 | 高h视频在线免费观看| 亚洲性在线看高清h片| 免费成人在线电影| 亚洲xxxx18| 久久亚洲色一区二区三区| 久久国产高潮流白浆免费观看| 亚洲色一区二区三区四区| 久久久久国产成人精品亚洲午夜 | 亚洲乱码中文论理电影| 国产在线观看www鲁啊鲁免费| 国内精品99亚洲免费高清| 亚洲一区免费在线观看| 亚洲精品一级无码中文字幕| 在线观看免费视频资源| 成人午夜影视全部免费看| 亚洲精品亚洲人成在线观看麻豆 |