如何知道浏览器是否真的完成了浏览



我通常会知道浏览器是否已完成了DocumentCompleted Event的加载。

但是,最近,当我尝试像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 Pagead网站以及大约:空白(???)。每个导航事件将由DocumentCompleted事件结束。

那么,如果我只想知道浏览器何时真正完成网站的浏览器,我应该听什么事件?

不确定较旧版本,但是在geckofx版本12.0中,有两个有用的属性:

  • isbusy
  • isajaxbusy

您可以通过检查这两个属性来确定浏览器是否已完成,并通过检查所有内容:

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

示例是C#,对不起。但是您可以比我更好地转换为VB.NET。

在vb.net中添加此事件处理程序和例程

Sub PageLoaded_Event(ByVal sender As Object, ByVal e As Gecko.Events.GeckoDocumentCompletedEventArgs) Handles GeckoWebBrowser1.DocumentCompleted
    PageLoaded = True
End Sub
Sub WaitForNav()
    While PageLoaded = False
        Application.DoEvents()
    End While
    PageLoaded = False
End Sub

然后在每个geckowebbrowser.navigate(www ...)调用waitfornav。

之后

希望这对他人有所帮助

相关内容

  • 没有找到相关文章

最新更新