方法1:procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin if WebBrowser1.Application = pDisp then showmessage('頁面已全部下載完畢')end; 說明一下,每個iframe下載完畢都會觸發DocumentComplete事件,所以一個頁面在真正下載完畢前可能被觸發多次
方法2:procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
CurWebrowser: IWebBrowser;
TopWebBrowser: IWebBrowser;
Document: OleVariant;
WindowName: string;
begin
CurWebrowser := pDisp as IWebBrowser;
TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;
if CurWebrowser = TopWebBrowser then
ShowMessage('Complete document was loaded')
else
begin
Document := CurWebrowser.Document;
WindowName := Document.ParentWindow.Name;
ShowMessage(Format('Frame "%s" was loaded', [WindowName]));
end;
end;
方法3:
var isok::boolean
procedure TForm1.wbProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
if progress=-1 then isok:=true;
end;
總結:三個方法都可能對,也都可能不對,特別是現在還有AJAX的存在,我的想法是把每一種方法都試一下,自己看一下變量變化,相應的調整方法,得到滿意的結果,偶個人建議使用第三種,簡單明瞭而且實用。針對AJAX可以通過獲取的HTML來判斷,因爲它是不刷新頁面的,所以不用擔心取不到HTML,同時它雖然沒刷新頁面,但它肯定會刷新數據,如果新新數據出現了,那麼頁也就加載完成了,當然具體問題具體分析。