WebBrowserでURLが完全に表示されるまでに待つには?


ともちゃん  2003-10-04 21:59:20  No: 79645

教えてください。
WebBrowserでURLが完全に表示されるまで待ちたいのですが、可能ですか?

    Do While Webアクセス.Busy
        DoEvents
    Loop
という感じで待とうとしているのですが、完全に表示される前に次の処理に
行ってしまって困ってます。


魔界の仮面弁士  2003-10-04 23:46:37  No: 79646

> 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です)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加