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

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

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

    weidagang2046的專欄

    物格而后知致
    隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0
    數(shù)據(jù)加載中……

    Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法

    2007-03-04

    一般情況下,當(dāng)ReadyState屬性變成READYSTATE_COMPLETE時(shí),Webbrowser控件會(huì)通過觸發(fā)DocumentCompleted事件來(lái)指示網(wǎng)頁(yè)加載完畢。但當(dāng)加載的網(wǎng)頁(yè)包含frame時(shí),可能會(huì)多次觸發(fā)該事件,所以不能簡(jiǎn)單地通過它來(lái)判斷網(wǎng)頁(yè)加載完畢。

    從微軟的官方網(wǎng)站上了解到,并非每個(gè)frame都對(duì)應(yīng)了一個(gè)DocumentCompleted事件,只有觸發(fā)了DownloadBegin事件的frame才會(huì)有相應(yīng)的DocumentCompleted事件。另外,最外層的frame總是最后觸發(fā)DocumentCompleted事件。DocumentCompleted事件具有一個(gè)IDispatch *類型的參數(shù),它指示了是在哪個(gè)frame上觸發(fā)的該事件。所以,要判斷文檔是否加載完畢,只需要判斷IDispatch *參數(shù)是否是Webbrowser控件的IDispatch。

    微軟support網(wǎng)站上關(guān)于這個(gè)問題的說(shuō)明:
    http://support.microsoft.com/?scid=kb%3Ben-us%3B180366&x=9&y=14

    這個(gè)方法用到了COM相關(guān)的知識(shí),在沒有現(xiàn)成代碼的情況下,對(duì)于像我這樣從.NET開始進(jìn)入Windows平臺(tái)的程序員來(lái)講理解和實(shí)現(xiàn)起來(lái)都有一定的難度。尤其是.NET 2.0下的Webbrowser控件是對(duì)Webbrowser COM組件的不完全封裝,我在考察.NET 2.0 Webbrowser的WebBrowserDocumentCompletedEventArgs后并未發(fā)現(xiàn)有IDispatch參數(shù)或相關(guān)參數(shù)。不知道是不是在封裝過程中被省去了。

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

    1. 引入一個(gè)計(jì)數(shù)器變量,初始值為0;
    2. 當(dāng)Webbrowser控件的DownloadBegin (.NET 2.0中的Navigated)事件發(fā)生時(shí)對(duì)計(jì)數(shù)器加一;
    3. 當(dāng)Webbrowser控件的DownloadCompleted事件發(fā)生時(shí)對(duì)計(jì)數(shù)器減一;
    4. 計(jì)數(shù)器減為0說(shuō)明文檔加載完畢

    主要代碼:

    // 計(jì)數(shù)器
    int ?counter? = ? 0 ;



    // 添加事件響應(yīng)函數(shù)

    this .webBrowser.Navigated? += ? new ?System.Windows.Forms.WebBrowserNavigatedEventHandler(webBrowser_Navigated);

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

    // 事件響應(yīng)函數(shù)

    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) 評(píng)論(12)  編輯  收藏

    評(píng)論

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

    謝謝,相當(dāng)有幫助。
    2007-04-10 09:48 | calf

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

    說(shuō)錯(cuò)了,應(yīng)該是——
    判斷e.Url和WebBrowser.Document.Url
    2007-07-11 14:50 | 鋼盅郭子

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

    這些都是針對(duì)WebBrowser的。我是用網(wǎng)上下載的ExWebBrowser控件,結(jié)果刷新時(shí),DocumentCompleted獲取不到事件,但如果里面有iframe,則DocumentCompleted響應(yīng)的是iframe的,因我是動(dòng)態(tài)加載iframe,所以DocumentCompleted事件獲取的e.url都是空,應(yīng)該是此控件的問題,上述方法對(duì)此控件無(wú)效。針對(duì)此問題,采用一個(gè)簡(jiǎn)單的計(jì)數(shù)器,做if/else判斷,然后通過 += 和 -= 來(lái)防止事件被注冊(cè)多次...
    2009-03-10 14:17 | TT

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

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

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

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

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    # re: Webbrowser控件判斷網(wǎng)頁(yè)加載完畢的簡(jiǎn)單方法  回復(fù)  更多評(píng)論   

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费做爰猛烈吃奶摸视频在线观看 | 国产亚洲人成A在线V网站| 在线a亚洲v天堂网2019无码| 久久久久亚洲AV成人无码| 亚洲日韩乱码中文无码蜜桃| 国产午夜亚洲精品国产| 精品视频免费在线| 免费a级毛片无码a∨免费软件| 最近2019中文字幕免费大全5| 成熟女人特级毛片www免费| 免费大黄网站在线观| 国产成人亚洲精品狼色在线| 4480yy私人影院亚洲| 欧美亚洲国产SUV| 在线观看黄片免费入口不卡| 7723日本高清完整版免费| 亚洲A∨午夜成人片精品网站| 久久精品国产亚洲av麻| 亚洲综合色婷婷在线观看| 国产人成网在线播放VA免费| 蜜桃AV无码免费看永久| 免费欧洲美女牲交视频| 在线免费观看亚洲| 美女黄频免费网站| 亚洲大片免费观看| 亚洲国产精品碰碰| 亚洲成在人线中文字幕| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲高清不卡视频| 麻豆91免费视频| 精品无码免费专区毛片| 亚洲国产成人精品91久久久| 精品亚洲成AV人在线观看| 亚洲AV成人一区二区三区观看| 免费人成毛片动漫在线播放| 日韩电影免费在线| 亚洲天堂久久精品| 一级看片免费视频| 成人毛片18岁女人毛片免费看| 日韩亚洲一区二区三区|