基于 MSDN 上的这篇文章:如何确定页面何时在 WebBrowser 控件中完成加载,以及过去对 StackOverflow 的讨论,我假设在具有多个框架的文档的情况下,DocumentComplete 事件将触发多次,并且最后一次将是顶级框架。
但是,使用上述 MSDN 链接中的确切示例代码,我发现如果在执行 Navigate to a URL 时有多个 DocumentComplete 事件,则第一次满足以下代码中的条件,而不是最后一次满足文章似乎表明。DocumentComplete 的后续调用似乎是针对较低级别的帧,因为条件失败。
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();
我不确定为什么我观察到的行为与文档中的行为完全相反。对此的任何指示将不胜感激。
背景:我在基于对话框的 VC++/MFC 应用程序中使用此代码,并且在 DocumentComplete 事件中,我想在文档完全加载时获得某些统计信息。所以我试图使用上面的代码来检测 DocumentComplete 触发的特定实例是在页面完全加载时。