この MSDN の記事: WebBrowser Controlでのページの読み込みが完了したことを確認する方法、および 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 の特定のインスタンスがページが完全に読み込まれたときに発生することを検出しようとしていました。