2

私は通常、ブラウザーが DocumentCompleted イベントで読み込みを終了したかどうかを知ります。

しかし最近、http://youtube.comのようなサイトを試していると、 documentcompleted イベントが複数回発生します。何が起こったのかを確認するために console.writeline を配置しました

Private Sub mybrowser_Navigating(ByVal sender As Object, ByVal e As Gecko.GeckoNavigatingEventArgs) Handles mybrowser.Navigating
    Console.WriteLine("navigating " + e.Uri.AbsoluteUri)
End Sub

Private Sub mybrowser_Navigated(ByVal sender As Object, ByVal e As Gecko.GeckoNavigatedEventArgs) Handles mybrowser.Navigated
    Console.WriteLine("navigated " + e.Uri.AbsoluteUri)
End Sub

Private Sub mybrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.EventArgs) Handles mybrowser.DocumentCompleted
    Console.WriteLine("document " + mybrowser.Document.Url.AbsoluteUri)
End Sub

結果は(http://youtube.comでテスト)

navigating http://youtube.com/
navigated http://www.youtube.com/
document http://www.youtube.com/
navigating http://www.google.com/pagead/drt/ui
navigated wyciwyg://0/http://www.youtube.com/
navigating wyciwyg://0/http://www.youtube.com/
document http://www.youtube.com/
navigating about:blank
document http://www.youtube.com/
document http://www.youtube.com/

ご覧のとおり、サイトはキャッシュ、Google ページ広告サイト、about:blank(???) など、リダイレクトとナビゲート イベントを数回起動しています。各ナビゲーション イベントは、documentcompleted イベントによって終了します。

では、リダイレクトの数に関係なく、ブラウザーがサイトの閲覧を本当に完了したときを知りたいだけの場合、どのイベントをリッスンする必要がありますか?

4

2 に答える 2

1

古いバージョンについては不明ですが、GeckoFx のバージョン 12.0 には、2 つの便利なプロパティがあります。

  • 忙しい
  • IsAjaxBusy

次の 2 つのプロパティを確認することで、ブラウザがドキュメントとすべてのものの読み込みを完了したかどうかを判断できます。

if (geckofx.IsBusy || geckofx.IsAjaxBusy)
{
    // still busy, not finished yet
}
else
{
    // finished
}

例はC#です、すみません。しかし、おそらく私よりもうまくVB.NETに変換できます。

于 2012-11-21T22:46:48.000 に答える