基於MSDN上的這篇文章:How To Determine When a Page Is Done Loading in WebBrowser Control,以及過去關於StackOverflow的討論,我會假設在具有多個框架的文檔的情況下,DocumentComplete事件會多次觸發,最後一次是頂層框架。爲什麼Webbrowser控件首先爲頂級框架觸發了DocumentComplete事件?
但是,使用上述MSDN鏈接中的確切示例代碼,我發現如果在執行導航到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觸發的一個特定實例,當頁面完全加載時。
注意:我正在調試與http://www.microsoft.com等URL對應的網頁的初始加載,並沒有考慮進一步的用戶操作,例如點擊頁面上的鏈接。多個DocumentComplete事件都是對應於初始頁面加載(我相信頁面的每一幀都有一個) –