您的位置:首页 > 其它

判断一个页面加载完全完成的准确方法

2014-01-24 12:08 323 查看
!!http://www.codeproject.com/Articles/4411/IEHelper-Internet-Explorer-Helper-Class

bool CMyInternetExplorer::WaitTillLoaded (int nTimeout)
{
READYSTATE result;
DWORD nFirstTick = GetTickCount ();

do
{
m_pWebBrowser->get_ReadyState (&result);

if (result != READYSTATE_COMPLETE)
Sleep (250);

if (nTimeout > 0)
{
if ((GetTickCount () - nFirstTick) > nTimeout)
break;
}
} while (result != READYSTATE_COMPLETE);

if (result == READYSTATE_COMPLETE)
return true;
else
return false;
}

!!http://hi.baidu.com/jakisou/item/e016473db5c99d637c034b90

public:

void DocumentComplete(LPDISPATCH pDisp, VARIANT* URL);

然后在实现文件中添加:

void CMyHtmlView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)

{

// 这里写什么呢?

}

上面函数的实现部分写什么呢?就是前面所说的“判断页面是否加载完成”的代码了。我们从MS的这篇惨不忍睹的机器翻译的文章里,还是可以得到很多启发的,我修改了一下,使得代码适合于VC 2005+IE7的环境,如下:

void CMyHtmlView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)

{

m_nCount++; // 这是一个类成员变量,用于计数

LPDISPATCH lpWBDisp = NULL;

HRESULT hr = NULL;

hr = m_pBrowserApp->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);

ASSERT(SUCCEEDED(hr));

if (pDisp == lpWBDisp)

{

CString strMessage;

strMessage.Format(“页面加载完成!\n\n进入DocumentComplete函数的次数:%d”, m_nCount);

// Top-level Window object, so document has been loaded

MessageBox(strMessage);

}

lpWBDisp->Release();

}

http://blog.csdn.net/wangjia184/article/details/3684862

http://www.myexception.cn/vc-mfc/396586.html

设置一个定时器多等一下吧。
不光是百度,谷歌也是这样,为了尽快显示首页,页面设计得非常简单,等文档加载完成之后使用定时器再加载一个脚本标签,在脚本文件里通过DOM添加更多的页面内容,这都是加快页面显示速度的技巧。

OnDocumentComplete是在</html>标签处理完毕时就会发出,但是定时器都是在之后执行的,可能永远执行不完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: