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

posted on 2011-11-06 11:33  del88  阅读(2)  评论(0编辑  收藏  举报