我通常会知道浏览器是否已完成使用DocumentCompleted事件加载。
但是最近,当我尝试像http://youtube.com这样的网站时,文档已完成的事件不止一次启动。 我放置了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网站和about:blank(???)。每个导航事件都将通过文档完成事件结束。
那么,如果我只是想知道浏览器何时完成浏览网站,无论有多少重定向,我应该听哪个事件?
答案 0 :(得分:1)
不确定旧版本,但在GeckoFx版本12.0中,有两个有用的属性:
您可以通过检查以下两个属性来确定浏览器是否已完成加载文档和所有内容:
if (geckofx.IsBusy || geckofx.IsAjaxBusy)
{
// still busy, not finished yet
}
else
{
// finished
}
示例是C#,抱歉。但是你可以把它转换成VB.NET比我更好。
答案 1 :(得分:1)
在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。
希望这有助于其他人