天天看點

Delphi中WebBrowser判斷頁面及JS是否加載完成

時間很完了,但問題總算解決了。

在一個程式中需要判斷WebBrowser打開的頁面是否加載完成,通常的做完是使用Busy屬性,代碼如下:

while WebBrowser1.Busy do

    Application.ProcessMessages;

這個通路對于通路純Html的頁面時是一點兒問題都沒有的,但有些頁面在設計時為了不影響打開速度,是讓html代碼優先顯示,然後再運作js代碼或架構代碼,由于我要通路的頁面中沒有調用架構頁面,是以沒作測試。

經過一夜的摸索,最終找到了解決辦法:

procedure TForm1.wb1ProgressChange(Sender: TObject; Progress,

  ProgressMax: Integer);

begin

    //判斷頁面及JS是否執行完畢

    if ( Progress = 0 ) and ( ProgressMax = 0 ) and

        ( OldProgress = -1 ) then

    begin

        IsWebLoadComplete := True;

    end;

    OldProgress := Progress;

end;

在此之前我對ProgressChange事件參數中的值進行了跟蹤,發現目前進度的值和總進度的值相等後并不一定代表頁面全部加載完成,但頁面在加載完成後,Progress和ProgressMax的後兩個值卻總是-1/1000000和0/0。Progress的值為-1,有可能是頁面全部加載完成了,但也有可能是隻加載完了需要通路的其中一個頁面檔案。

經過多次測試,當-1/1000000和0/0接連出現時,就可以保證頁面已經全部加載完成了。