如何判断webbrowser里的网页下载完成,正确的版本和方法

概要

Internet Explorer WebBrowser 控件触发 DocumentComplete 事件则在完成后下载网页。 您可以在此事件的应用程序中创建事...

<script type="text/javascript"></script>

Internet Explorer WebBrowser 控件触发 DocumentComplete 事件则在完成后下载网页。 您可以在此事件的应用程序中创建事件处理程序函数。 本文介绍确定是否需要执行步骤在 WebBrowser 控件已完成下载网页。

更多信息
WebBrowser 控件触发 DocumentComplete 事件的 ReadyState 属性更改为 READYSTATE_COMPLETE 时。 这表示...

<script type="text/javascript"></script>

WebBrowser 控件触发 DocumentComplete 事件的 ReadyState 属性更改为 READYSTATE_COMPLETE 时。 这表示 WebBrowser 控件已完成下载网页。 以下是有关此事件的一些要点:
  • 在带有没有框架页的情况下 DocumentComplete 触发一次所有完成后。
  • 在多个的帧的情况下 DocumentComplete 获取触发多次。 并非每个框架将触发此事件,但触发 DownloadBegin 事件的每个框架将触发相应的 DocumentComplete 事件。
  • DocumentComplete 事件有一个 IDispatch * 为参数是用于触发 DocumentComplete 框架 (Shdocvw) 的 IDispatch。
  • 顶级框架触发最后 DocumentComplete。 以检查是否不进行页面下载,需要检查 IDispatch * 参数是否与 WebBrowser 控件的 IDispatch 相同。

    对于 Visual Basic 以下是执行此检查的代码:
    Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object,
                                             URL As Variant)
       If (pDisp Is WebBrowser1.Object) Then
          Debug.Print "Web document is finished downloading"
       End If
    End Sub
    					
要处理 DocumentComplete 事件在 Visual C++ 中的,并确定网页的下载是否完成,请执行这些步骤。

请注意您执行的步骤取决于使用 WebBrowser 控件的方式。
  • 如果要创建 WebBrowser 控件 CWnd / CView 对象中,您必须执行步骤 1 至 4。
  • 如果您 CDialog / CFormView 对象中创建 WebBrowser 控件,只需要执行步骤 4。
  • 如果您使用随 Visual C++6.0 提供 CHtmlView 类,覆盖 CHtmlView::DocumentComplete(),并按照步骤 4,使用 CHtmlView 类的该 m_pBrowserApp 成员访问 WebBrowser 控件。
  1. 在头文件为 CWnd / CView 派生类中定义 OnDocumentComplete 方法:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. 声明事件接收器在相同的头文件中:
    DECLARE_EVENTSINK_MAP()
    					
  3. 在实现文件 (.cpp) 为 CWnd / CView 派生类,实现事件接收器映射:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. 实现 OnDocumentComplete 方法:
    void CWBTstView::OnDocumentComplete(LPDISPATCH lpDisp,
                                        VARIANT FAR* URL)
    {
       IUnknown*  pUnk;
       LPDISPATCH lpWBDisp;
       HRESULT    hr;
    
       pUnk = m_webBrowser.GetControlUnknown();
       ASSERT(pUnk);
    
       hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
       ASSERT(SUCCEEDED(hr));
    
       if (lpDisp == lpWBDisp )
       {
          // Top-level Window object, so document has been loaded
          TRACE("Web document is finished downloading/n");
       }
    
      lpWBDisp->Release();
    }
    					
WebBrowser 控件定位到更改顶级框架的页面时,此方法适用。 假设是否在导航发生本身,范围内则触发的最终 DocumentComplete 的图文框与不顶层框架。 是例如请考虑如下情形。

WebBrowser 控件承载一个框架集。 框架集的一个框架中, 用户单击一个链接将外框本身中打开一个新的页面,并使该框架集的其余部分保持不变。 新建页可能再次包含多个框架。 因此,会有多个 DocumentComplete 通知 (一个用于每个新的框架)。 但是,因为更改,顶级框架也不会发生最终 DocumentComplete 会的框架的已更改。

如果您感兴趣检查在这种情况下完成最终文档,可以执行以下操作:
请检查该 DocumentComplete 的 IDispatch 参数是否 IDispatch 参数的第一个 NavigateComplete2 事件相同。 因为第一个 NavigateComplete2 是顶级框架,而最后一个 DocumentComplete 还是顶层框架,执行这样的方式比较将告诉是否完成页下载。
下面是一些示例 C++ 代码:
LPDISPATCH glpDisp = NULL; // global LPDISPATCH, can also
                           // be of class scope

// NavigateComplete2 event
void CWebbrDlg::OnNavigateComplete2Explorer1(LPDISPATCH pDisp,
                                             VARIANT FAR* URL)
{
   // Check if glpDisp is NULL. If NULL, that means it is
   // the top level NavigateComplete2. Save the LPDISPATCH
   if (!glpDisp)
      glpDisp = pDisp;
}

void CWebbrDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp,
                                            VARIANT FAR* URL)
{
   if (glpDisp && glpDisp == pDisp)
   {
      // if the LPDISPATCH are same, that means
      // it is the final DocumentComplete. Reset glpDisp
      TRACE("Document is done downloading");
      glpDisp = NULL;
   }
}
				

这篇文章中的信息适用于:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
关键字: 
kbmt kbhowto KB180366 KbMtzh
机器翻译 机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。
点击这里察看该文章的英文版: 180366  (http://support.microsoft.com/kb/180366/en-us/ )
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
Retired KB Article 不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
介绍一下本版本的 亮 点功能: 1.支持HTTPS请求抓包。 2.支持IE内核版本的切换与GPU加速。 3.支持自定义UserAgent功能。 4.请求可直接使用【精易网页助手】进行测试: --------------------------------------------------------------------------------------------------------------------------- 未来 的计划: 1.插件系统 的完整实现。本次实现的插件系统将更加强大,更加完善。敬请期待新功能。(插件将保留原插件系统功能,并且进行扩展) 2.将会支持皮肤的自定义。 3.修复程序中的bug。 ‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’ 更多的功能与建议 ,请在 反馈区 进行反馈,您的意见和支持是我们前进的动力。       精易抓包浏览器2.3.2更新内容 修复打开浏览器是默认的命令行 修复有时程序会打开直接结束的问题。(可以删除zc项目HKEY_CURRENT_USER\Software\JYWebBrowser\WebBrowser\Settings,重置所有配置) 完成v2.3.2 精易抓包浏览器2.3.1更新内容 解决在网页浏览时出其不意的卡住 完成v2.1.1 解决图标依然无法正常显示 完成v2.1.2 返回数据编码问题。数据设置为只读,支持查看图片 完成v2.3 网页加载速度提高,解决闪动问题。 完成v2.2 网页缩放 完成与2.2.1 浏览器独立Cookie(v1.1 不与IE共享,不与其他程序共享) 完成v2.1.3 下载 说明: 方法 1:可以直接点击下载下载单独程序。 下载后,建议将程序直接放入【 精易编程助手 】的文件夹中替换旧版。 方法 2:可以直接运行精易编程助手 ,在菜单中点击检测更新。 稍后程序将自动更新。
l_e多页面浏览器(1.4.136)源码 2007-2-12 其实此为0.5preview的版本,但有还没做到预期希望完成的功能,还差些吧,于是还叫1.4, 本来是暂时不想放出来的,想把未完成的都完成了再放出来,但最近也懒了,还是先把这个放出来吧, 修改的东西比较多,特别是插件部分的代码,详细还是看devlog.txt吧 l_e多页面浏览器(1.4.56)源码 2006-1-11 源码所作的更新可以在devlog.txt中看到 myacc是实现"监视所有下载项"的主要代码,用vc写 l_e多页面浏览器(1.4.0)源码 2005-8-30 =========== 目录 ============ 浏览器特点 使用到的技巧 各文件夹作用 其他 ==============浏览器特点============== 1.多页面浏览(呵呵,此为废话) 2.支持鼠标手势,并且可以自定义 3.支持页面拖拽,并且可以定义拖拽各方向的功能(类似GreenBrowser).拖拽开启时,页面中原本拖拽所实现的部分功能能正常使用,如将一段文字拖拽进一个textarea,input等,好像现在网上流行的多页面浏览器并不具备这个功能哦. 4.支持插件 5.广告过滤(效果大概没有现在那些热门多页面浏览器好,如maxthon) 6.页面规则,对地址满足一定条件的页面执行相应操作 7.自定义搜索引擎,可使用多引擎搜索 8.方便代理服务器切换 9.捕获下载地址,并使用指定的下载工具下载 10.rss阅读(利用插件) 11.绿色 12...... ==============使用到的技巧============== 1.鼠标手势的实现 2.动态生成菜单并相应其点击事件,响应右键,可弹出菜单 3.自画菜单 4.利用资源文件生成菜单,并将其嵌入toolbar中 5.能够对单独网页设定是否显示图片,ActiveX,动画,音乐...等东西 6.实现了前进后退历史记录的显示 7.如何使用代理 8.使用ini文件 9.托盘图标 10.用api生成Toolbar,ListView,TreeView,TabStrip,StatusBar(代码另附) 11.无需注册就可以使用com组件(如vb生成的ActiveX Dll) 12.插件系统,这个系统完全是我自己想出来的,可能未必完善 13.关于webbrowser的东西 14..... ==============各文件夹作用===================== \MDI 主程序源码 \TLBz 主程序缺什么库(如tlb),到这来找就有了 \ClearCache 一个清除缓存等的工具(源码) \Plugin_LIB 制作插件相关的tlb源码 \Plugins 以写成的插件源码 \Plugins\RssRead rss阅读插件 \release exe \rundllvb 用来调用dll(用于dll型插件)源码(vc6) \IEMouseHand 是一个BHO(browser help object),用于对付那些对话框式弹出页面 ==============其他============== 1.关于库"jccatch.dll#jccatch 1.0 Type Library", 这个是flashget的东西,可以不要,并将frmFlashgetDownload中的Sub AddUrl()中的内容注释掉就行了 2.需要设置一下vb才能在ide中正常运行 tools->options->general, error trapping那选上 break on unhandled errors 3.这个程序是从2001年开始写的,那时候写的代码在各方面都不成熟,注释就不用说了,也就最近新写或改写的代码才有部分注释,各位大虾就有怪莫怪了. 详细文档,呵呵,懒人啊,以后再慢慢补上吧,现在先把代码发布了再说. 4.部分问题(如鼠标手势)可以到我的blog看看. 5.这个东西我自己一直都在用的,所以不断会有更新,也会上传到我的主页. 6.请不要用作商业用途(估计也没人用吧,^_^) ===================================== by lingll 2005-8-30 homepage: http://lingll.yeah.net blog: http://blog.csdn.net/lingll/ email: [email protected]
l_e多页面浏览器(0.6)源码 2010-9-18 在09年2月份的时候版本就变成0.6了,那时候就想着要把源码公布出来. 至于为何拖到现在才发布?一直没想到应该用怎样的版权声明. 到了现今,貌似也没必要想这个事情了,各位喜欢怎样用这份源码都行,如果可以的话,最好能提一下我,^0^ 另,库找不到的问题,可以先把所有的引用去掉,然后再依次添加. l_e多页面浏览器(1.4.136)源码 2007-2-12 其实此为0.5preview的版本,但有还没做到预期希望完成的功能,还差些吧,于是还叫1.4, 本来是暂时不想放出来的,想把未完成的都完成了再放出来,但最近也懒了,还是先把这个放出来吧, 修改的东西比较多,特别是插件部分的代码,详细还是看devlog.txt吧 l_e多页面浏览器(1.4.56)源码 2006-1-11 源码所作的更新可以在devlog.txt中看到 myacc是实现"监视所有下载项"的主要代码,用vc写 l_e多页面浏览器(1.4.0)源码 2005-8-30 =========== 目录 ============ 浏览器特点 使用到的技巧 各文件夹作用 其他 ==============浏览器特点============== 1.多页面浏览(呵呵,此为废话) 2.支持鼠标手势,并且可以自定义 3.支持页面拖拽,并且可以定义拖拽各方向的功能(类似GreenBrowser).拖拽开启时,页面中原本拖拽所实现的部分功能能正常使用,如将一段文字拖拽进一个textarea,input等,好像现在网上流行的多页面浏览器并不具备这个功能哦. 4.支持插件 5.广告过滤(效果大概没有现在那些热门多页面浏览器好,如maxthon) 6.页面规则,对地址满足一定条件的页面执行相应操作 7.自定义搜索引擎,可使用多引擎搜索 8.方便代理服务器切换 9.捕获下载地址,并使用指定的下载工具下载 10.rss阅读(利用插件) 11.绿色 12...... ==============使用到的技巧============== 1.鼠标手势的实现 2.动态生成菜单并相应其点击事件,响应右键,可弹出菜单 3.自画菜单 4.利用资源文件生成菜单,并将其嵌入toolbar中 5.能够对单独网页设定是否显示图片,ActiveX,动画,音乐...等东西 6.实现了前进后退历史记录的显示 7.如何使用代理 8.使用ini文件 9.托盘图标 10.用api生成Toolbar,ListView,TreeView,TabStrip,StatusBar(代码另附) 11.无需注册就可以使用com组件(如vb生成的ActiveX Dll) 12.插件系统,这个系统完全是我自己想出来的,可能未必完善 13.关于webbrowser的东西 14..... ==============各文件夹作用===================== \MDI 主程序源码 \TLBz 主程序缺什么库(如tlb),到这来找就有了 \ClearCache 一个清除缓存等的工具(源码) \Plugin_LIB 制作插件相关的tlb源码 \Plugins 以写成的插件源码 \Plugins\RssRead rss阅读插件 \release exe \rundllvb 用来调用dll(用于dll型插件)源码(vc6) \IEMouseHand 是一个BHO(browser help object),用于对付那些对话框式弹出页面 ==============其他============== 1.关于库"jccatch.dll#jccatch 1.0 Type Library", 这个是flashget的东西,可以不要,并将frmFlashgetDownload中的Sub AddUrl()中的内容注释掉就行了 2.需要设置一下vb才能在ide中正常运行 tools->options->general, error trapping那选上 break on unhandled errors 3.这个程序是从2001年开始写的,那时候写的代码在各方面都不成熟,注释就不用说了,也就最近新写或改写的代码才有部分注释,各位大虾就有怪莫怪了. 详细文档,呵呵,懒人啊,以后再慢慢补上吧,现在先把代码发布了再说. 4.部分问题(如鼠标手势)可以到我的blog看看. 5.这个东西我自己一直都在用的,所以不断会有更新,也会上传到我的主页. 6.请不要用作商业用途(估计也没人用吧,^_^) ===================================== by lingll 2005-8-30 blog: http://blog.csdn.net/li

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值