教えてください。
WebBrowserでURLが完全に表示されるまで待ちたいのですが、可能ですか?
今
Do While Webアクセス.Busy
DoEvents
Loop
という感じで待とうとしているのですが、完全に表示される前に次の処理に
行ってしまって困ってます。
> WebBrowserでURLが完全に表示されるまで待ちたいのですが、可能ですか?
HTMLページに対して、DHTMLオブジェクト モデルを通じてコンテンツにアクセスする場合、
WebBrowser/InternetExplorerの『完了系イベント』を利用するのが一般的です。
完了系イベントには、以下のような物があります。
NavigateComplete2
windowオブジェクトやframesetエレメントからの、リンクナビゲーション(移動)が
完了した時に発生します。なお、Navigate2メソッドの呼び出しでも発生します。
DownloadComplete
ドキュメントが完全にダウンロードされると発生します。
ナビゲーションが失敗した場合にも、このイベントが呼び出されます。
DocumentComplete イベント
HTMLドキュメントが解析され、それをDHTMLオブジェクトモデルを
通じてコンテンツにアクセスできるようになった時に発生します。
基本的には、DocumentCompleteイベントを使えば良いでしょう。
このイベントが発生するまで、ドキュメントの完全な読み込みは保証されません。
ドキュメントに対するすべてのシンクは、これ以後に行う必要があります。
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/events/documentcomplete.asp
ドキュメントが完全にダウンロードされると、DownloadCompleteイベントが発生しますが、
この場合でも、そのオブジェクト モデルを通じてドキュメントの内容を管理することは
必ずしも安全ではありません。代わりに、DocumentCompleteイベントを使うようにします。
(DocumentCompleteは、すべてが完了し、ドキュメントの準備が整ったことを示します)
# なお、MicrosoftのDino Esposito氏の記事(1999年1月当時)
# [Browser Helper Objects: The Browser the Way You Want It]
# によると、DocumentCompleteは、対象URLに初めてアクセスしたときにだけ届き、
# F5キーや[最新の情報に更新]をクリックした2回目以降は、DownloadComplete
# イベントだけが発生する……という記述があります。この点は注意が必要です。
なお上記とは別に、IE3当時の
DownloadComplete
FrameNavigateComplete
NavigateComplete
などのイベントも利用可能です。が、これらは現在では
ほとんど利用されていませんので、あえて使う必要は無いでしょう。
> Do While Webアクセス.Busy
Busyプロパティは、ナビゲーション/ダウンロード操作の状態を示していますので、
このプロパティだけを頼りにするのは危険です。
(HTML文書を解析するのはWebBrowser自身ではなく、MSHTMLです)
ツイート | ![]() |