分享

WebBrowser判断网页已下载完成

 独孤求财 2012-03-20

WebBrowser判断网页已下载完成

时间:2011-5-27来源:yang 作者: peng点击: 148次

问题:在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;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多