WebBrowserに対してDHTMLで操作を行う際、 ページの読み込みが完全に終わるまで待ってから コチョコチョと操作を行う流れになる。。 実際にはWebBrowserのDocumentCompleteイベントをトリガーに コチョコチョ操作を実装する訳で・・・ 通常のフレーム分割されていないページなら DocumentCompleteイベントを1度待てば済む話。ところがフレーム分割されているページだと DocumentCompleteイベント、BeforeNavigate2イベントが 非同期に複数パカパカとイベントが上がってくる。 さて全てのドキュメントを読み込むには どこまで待てば良いのか?というのが今回のテーマ。 結果から話す。 WebBrowserのDocumentCompleteでこんな実装をすれば良い。 '---------------------------------- If pDisp Is WebBrowser.Object then '最後の親フレーム Else '子供フレーム '読み込み途中なので無視 Exit Sub End If 'コチョコチョ処理をここから実装。 : : '----------------------------------- ちなみにDocumentCompleteが発生する前に何か処理をしたい場合も一緒。 BeforeNavigate2イベントの中で '----------------------------------- If pDisp Is WebBrowser.Object then '親フレーム Else '子フレームなので無視 Exit Sub End If '初期化処理などをココに実装 : : '------------------------------------ 解説するとフレームつきページを読み込んだ時の流れはこんな感じ。 BeforeNavigate2(親フレーム) 発生 BeforeNavigate2(子フレーム) 発生 BeforeNavigate2(子フレーム) 発生 BeforeNavigate2(子フレーム) 発生 DocumentComplete(子フレーム) 発生 DocumentComplete(子フレーム) 発生 DocumentComplete(子フレーム) 発生 DocumentComplete(親フレーム) 発生 子は順不同、最初と最後に必ず親フレームのイベントが上がってくる。 この親フレームのイベントを捕まえるには pDisp Is WebBrowser.Object という条件で 判断が出来るという仕組み。 この様に実装しておくとフレーム分割されたページでも pDispを使えば最後までドキュメントを読み込んだタイミングを 捕らえることが可能です。 ↑参考になったら拍手よろろ
スポンサーサイト
テーマ:プログラミング - ジャンル:コンピュータ