问题:在WebBrowser控件中如何判断,网页已下载完成 ( 积分:100, 回复:12, 阅读:1042 )
分类:Internet/TCPIP ( 版主:luyear, robertcool )
来自:fox007, 时间:2000-7-17 14:03:00, ID:284688 [显示:小字体 | 大字体]
在WebBrowser控件中如何判断,网页已下载完成!
来自:蚊子, 时间:2000-7-17 14:35:00, ID:284730
可以用onDocumentCompletes事件来判断。
来自:fox007, 时间:2000-7-18 11:14:00, ID:285626
我是说整个网页下载完成;其中包括:有贞的,asp,dhtml等;
来自:景冰, 时间:2000-7-18 11:27:00, ID:285648
同意蚊子,另外可再加上看wb.document是否为nil的判断
来自:蚊子, 时间:2000-7-18 13:49:00, ID:285782
呵呵,借用景冰的话,第一次在这个论坛上被人苟同..
onDocumentCompletes事件在一个有frame的网页上会被调用几次(看几个frame)
可以用OnBeforeNavigate2跟OnDocumentComplete一起配合使用,
首先Declare 一个变量 FirstpDisp
在浏览URL前。把FirstpDisp置为nil.然后浏览url
第一次调用OnBeforeNavidate是最早的Frame,它会传给一个pDisp: IDispatch给事件。
你把这个变量保存到FirstpDisp里。
这个最早的Frame的onDocumentComplete事件会最后发生,这时其它Frame已经下载完了。
你只要在OnDocumentComplete事件里判断一下,传给事件的参数pDisp: IDispatch 跟
FirstpDisp是不是相等就可以知道整个带Frame的网页下载完没.
来自:fox007, 时间:2000-7-19 11:16:00, ID:286551
但我遇到有的网站,当程序已显示完成时,其网页数据并未完成!
来自:蚊子, 时间:2000-7-19 12:31:00, ID:286601
这个方法是MSDN上说的,对于大部分网页应该是可行的。
比如带Frame的,有cgi的,asp的等等。
但是如果一个网页有jave applet,这个applet又要从服务器读数据,就无能为力了。
你遇到的网站,你试试用IE浏览,是不是也显示完成了。而数据还没完成。
来自:elan, 时间:2000-7-19 16:14:00, ID:286797
如果一个网页有好多图片,就经常出现浏览器告诉你完成,但那些图片
明明还没有下载完的。
来自:fox007, 时间:2000-7-19 17:29:00, ID:286870
有更好的办法通知我。谢谢!
来自:brianyu, 时间:2001-12-21 11:26:00, ID:801580
蚊子,你能不能给出一个详细的代码?
来自:cnkk, 时间:2002-12-22 18:37:00, ID:1528616
关注
来自:gowithme, 时间:2003-9-11 17:31:00, ID:2172765
if not webbrowser1.busy then
begin
你想干什么? ;
那就干什么吧 ;
end;
来自:liaobear1982, 时间:2006-4-9 13:42:58, ID:3409264
这个问题已经困惑我很长一段时间。。。非常感谢蚊子提供的思路。。。。真是太感谢了~!这个问题我已经解决好了。。。。现在把我的代码贡献给大家参考。。。。
FirstpDisp : IDispatch;//全局变量;
ChkOpen, ChkOk : Boolean;//全局变量;
FirstpDisp := nil;//浏览URL之前赋nil;
procedure TForm1.FormCreate(Sender: TObject);
begin
ChkOpen := true;
ChkOk := false;
end;
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if ChkOk and ChkOpen then
begin
ChkOk :=false;
ChkOpen :=false;
FirstpDisp := pDisp;
end;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
ChkOk :=true;
if FirstpDisp = pDisp then
begin
//你要执行的任务
//
end;
end;