zoukankan      html  css  js  c++  java
  • 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里的网页加载完成,也会触发这个消息响应,因此结合网页加载完成后网址是不变的来判断网页是否加载完成。
    运行效果如下图:

  • 相关阅读:
    表单提交原来是这句 return啊
    jquery控制table列.rar
    iframe 大数据量传参 本地能调用远程页面 不存在跨域问题 js组件调用原理
    public string GetUrltoHtml(string Url)
    一个xml转html的小程序 别人一个毕业设计【难度:简单】
    铭万轮换广告组件
    C#操作 ini文件类【转】
    捕捉浏览器的刷新与关闭 兼容ie、ff(火狐)
    列表循环 float:left marginright:10px 如何对齐右边距小技巧
    access 双表连接代码
  • 原文地址:https://www.cnblogs.com/sea520/p/12582277.html
Copyright © 2011-2022 走看看