OnDocumentComplete事件在网页中含有Frame时就不行了,每个Frame都会产生OnDocumentComplete事件,无法知道什么时候真正完成了。
有一种方法可以判断网页是否真正完成了:
var glpDisp: IDispatch = nil;
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if glpDisp = nil then glpDisp := pDisp;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if (glpDisp <> nil) and (glpDisp = pDisp) then begin
glpDisp := nil;
ShowMessage( '完成. ');
end;
end;
原理是:第一次产生NavigateComplete2事件和最后一次产生DocumentComplete事件都是顶级(top-level)Frame,所以可以通过比较pDisp来判断是否完成。
在微软网站上可以查到这种判断方法:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q180366
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2011/11/06/2237960.html