2012-11-02 151 views
2

我通常知道瀏覽器是否完成了使用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/ 

正如你可以看到,該網站重定向併發射了導航事件的幾個時間,包括緩存,谷歌pagead網站和約:空白(???)。每個導航事件將以documentcompleted事件結束。

那麼,如果我只想知道瀏覽器何時完成瀏覽網站,無論有多少重定向,我應該聽什麼事件?

+0

如果答案解決了您的問題,請將其標記爲已接受的答案。 – Doug

回答

1

不知道早期版本的,但在GeckoFx的12.0版本,有兩種有用的屬性:

  • IsBusy
  • IsAjaxBusy

您可以確定如果瀏覽器加載完成的文件和所有的東西,通過檢查這兩個屬性:

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

這個例子是C#,對不起。但你可以把它轉換成VB.NET,比我可以更好。

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。

希望這可以幫助其他人

相關問題