На основе этой статьи в MSDN: Как определить завершение загрузки страницы в элементе управления WebBrowser и из прошлых обсуждений StackOverflow я бы предположил, что в случае документа с несколькими фреймами событие 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 происходит, когда страница полностью загружена.