2011-07-20 44 views
1

我在窗口中有一個WPF System.Windows.Controls.WebBrowser控件。用戶可以輸入信息並在Web瀏覽器顯示的網頁中點擊提交按鈕。頁面回發後,它使用腳本對象與我的應用程序進行通信。我需要確保一旦提交按鈕被按下,表單不會關閉或以其他方式停止等待網頁回傳。如果我可以通過諸如「IsLoading」之類的屬性檢查WebBrowser或其文檔的狀態並且在加載時取消任何操作,那將是非常好的。我沒有看到類似的東西,所以我想在Navigating事件上設置一個標誌,並在Navigated或LoadCompleted事件中取消設置它,但是有一種情況是我單擊網頁上的一個鏈接(綁定到javascript,它不會進入新頁面)導航觸發,但導航和LoadCompleted從不觸發。有沒有辦法根據需要確定瀏覽器的狀態?確定WPF WebBrowser是否正在加載頁面

回答

0

不,看起來沒有辦法按需查詢WPF瀏覽器的狀態。我解決了我在Navigating事件處理程序中設置自己的標誌並將其置於Navigated事件處理程序中的原始想法。這對我來說並不可靠,因爲有一個腳本取消了導航(javascript:void(0))。

3

根據MSDN如果導航事件被調用,那麼導航事件也將被解僱,除非您明確指定Cancel導航。我嘗試了下面的代碼片段,它似乎工作正常。 (即)導航事件後導航事件被觸發時。

void Window1_Loaded(object sender, RoutedEventArgs e) 
    { 
     browser = new WebBrowser(); 
     browser.Navigate(new Uri("http://www.google.com")); 
     browser.Navigating += new NavigatingCancelEventHandler(browser_Navigating); 
     browser.Navigated += new NavigatedEventHandler(browser_Navigated); 
    } 

    void browser_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     Console.WriteLine("Loading Webpage !!"); 
    } 

    void browser_Navigated(object sender, NavigationEventArgs e) 
    { 
     Console.WriteLine("Webpage Loaded !!"); 
    } 

如果這不是你在找什麼,然後提供你所面臨的問題的網頁的URL。

+0

謝謝Karthik。不幸的是頁面不公開,如果你只是在瀏覽器中訪問它,它不會工作。這是爲了插入我的應用程序。我確實發現,當鏈接包含href =「javascript:void(0)」時,它不會觸發導航(顯然取消導航)。我將其更改爲href =「#」,現在它同時觸發。我也發現,如果我加入返回false;到鏈接的onclick事件,Web瀏覽器不會觸發任何事件。如果您將更新您的答案以專門解決問題,我會將其標記爲答案。這些事件應該可以工作,但不會根據需要查詢狀態。 – xr280xr