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

Vb.net 如何知道浏览器是否真的完成了浏览,vb.net,events,event-handling,browser,geckofx,Vb.net,Events,Event Handling,Browser,Geckofx,我通常会知道浏览器是否已使用DocumentCompleted事件完成加载 但最近,当我尝试像这样的站点时,documentcompleted事件不止一次启动。 我放置了console.writeline来检查发生了什么 Private Sub mybrowser_Navigating(ByVal sender As Object, ByVal e As Gecko.GeckoNavigatingEventArgs) Handles mybrowser.Navigating Consol

我通常会知道浏览器是否已使用DocumentCompleted事件完成加载

但最近,当我尝试像这样的站点时,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
结果是(使用测试)

如您所见,该站点多次重定向和启动导航事件,包括缓存、google pagead站点和about:blank(???)。每个导航事件将以documentcompleted事件结束


那么,如果我只想知道无论有多少重定向,浏览器何时真正完成了对站点的浏览,我应该听什么样的事件呢?

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

if (geckofx.IsBusy || geckofx.IsAjaxBusy)
{
    // still busy, not finished yet
}
else
{
    // finished
}
  • 我很忙
  • 艾萨克斯很忙
通过检查以下两个属性,可以确定浏览器是否已完成加载文档和所有内容:

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


希望这对其他人有帮助

如果答案解决了您的问题,请将其标记为已接受答案。