MFC WebBrowser判断网页加载完成

mfc 的webbrowser是大家使用非常多的一种查看操作网页的一种控件,在使用中,判断网页什么时候加载完成就显得非常重要了。下面介绍我采用的一种方法,这种方法可以判断网页内部即使有frame网页也是可以判断成功。
在对话框里添加一个webbrowser控件,在对话框的初始化函数OnInitDialog()中加入web控件默认加载的网页。

//禁用IE脚本错误
m_web.put_Silent(TRUE);
//默认打开百度网页
m_web.Navigate(L"https://www.baidu.com/", NULL, NULL, NULL, NULL);

添加一个全局变量:

//全局变量的定义
LPDISPATCH glpDisp = NULL;

接下来为webbrowser控件添加NavigateComplete2Explorer1消息

在NavigateComplete2Explorer1的消息响应函数中添加下面代码:

void CMFCTestDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
     // TODO: 在此处添加消息处理程序代码
     glpDisp = pDisp;
}

接下来为webbrowser控件添加NavigateComplete2Explorer1消息

在NavigateComplete2Explorer1的消息响应函数中添加下面代码:

void CMFCTestDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
glpDisp = pDisp;
}

接下来为webbrowser控件添加DocumentCompleteExplorer1消息响应

在DocumentCompleteExplorer1消息响应函数中判断网页是否加载完成

代码如下:

//获取网址
CString strUrl = URL->bstrVal;
if (pDisp == glpDisp)
{
//根据网址判断网页是否加载完成
if (strUrl == L"https://www.baidu.com/")
{
MessageBox(L"网页加载完成!");
}
}

在这里说一下判断网页加载完成的原理,DocumentComplete虽然字面意义是网页加载完成后触发的消息响应,但是对于网页内部包含有子框架网页时,这种方式就不行了。因为frame里的网页加载完成,也会触发这个消息响应,因此结合网页加载完成后网址是不变的来判断网页是否加载完成。
运行效果如下图:

原文地址:https://www.cnblogs.com/sea520/p/12582277.html

时间: 2024-10-12 07:48:25

MFC WebBrowser判断网页加载完成的相关文章

Webbrowser控件判断网页加载完毕的简单方法

一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕.从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了DownloadBegin事件的frame才会有相应的DocumentCompleted事件.另外,最外层的frame总是最

Webbrowser控件判断网页加载完毕的简单方法 (转)

摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕. 从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了Down

Webbrowser判断页面加载完成

Webbrowser 请求加载页面,页面中包含各种资源,不能够很准确的判断加载是否完成,需要通过特定的方法判断. 1.使用计数器判断页面是否加载完成.精准可控. // 计数器 int counter = 0 ; // 添加事件响应函数 this .webBrowser.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(webBrowser_Navigated); this .webBrowser.Docum

VB判断webbrowser网页加载完毕

'====VB判断webbrowser网页加载完毕 Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) If (pDisp Is WebBrowser1.Object) Then Msgbox "网页下载完毕!" End If End Sub

【MFC】转:在CHtmlView中判断页面加载完成

原帖:http://blog.csdn.net/wangjia184/article/details/3684862 论坛上有人问如何在CHtmlView中判断页面加载完成.这里给出一点想法. 首先想想这个问题如果是在JS里面是如何实现的.JS里面最简单的方式就是利用onload事件让一段JS在页面加载完成后启动.使用onload事件的好处是,能够保证页面上的image图片都已经加载完成. 比如: window.onload = function() { // do something } //

每日一题_JavaScript.两种方式实现网页加载后onload绑定多个函数?

具体需求: 1. 为网页加载后触发的onload事件绑定多个执行函数 实现思路: 1. 可直接给onload绑定一个匿名函数,匿名函数内部调用多个函数 2. 可自定义个函数,首先保存之前window.onload的值,然后判断window.onload的类型是否为function,如果不是就让window.onload的值设置为自定义的函数,否则就先执行window.onload之前绑定的函数,然后在执行自定义的函数 具体代码: <!DOCTYPE html> <html>    

如何通过预加载器提升网页加载速度

预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措.Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升. 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能.也有人认为它是有史以来提升浏览器性能最有效的方法.如果你第一次接触预加载器,也许心中已经有了无数个问号.什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件.CS

网页加载进度条的实现

本次主要介绍一下网页加载进度的实现.如下图,在页面加载的时候,上方红色的进度条 网页加载进度的好处是能够更好的反应当前网页的加载进度情况,loading进度条可用动画的形式从开始0%到100%完成网页加载这一过程.但是目前的浏览器并没有提供页面加载进度方面的接口,也就是说页面还无法准确返回页面实际加载的进度,本文中我们使用jQuery来实现页面加载进度条效果. 首先我们要知道的是,目前没有任何浏览器可以直接获取正在加载对象的大小.所以我们无法通过数据大小来实现0-100%的加载显示过程. 因此我

iOS WKWebView添加网页加载进度条(转)

一.效果展示 WKWebProgressViewDemo.gif 二.主要步骤 1.添加UIProgressView属性 @property (nonatomic, strong) WKWebView *wkWebView; @property (nonatomic, strong) UIProgressView *progressView; 2.初始化progressView - (void)viewDidLoad { [super viewDidLoad]; //进度条初始化 self.pr