2011-10-08 75 views
11

當我導航到不同的網站時,如何在WebBrowser控件中獲取頁面標題?如何在WebBrowser控件中獲取頁面標題?


的xmlns

xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 

屬性開始d

DataContext 
DesiredSize 
Dispatcher 
DoubleTap 

XAML標記

<phone:WebBrowser Name="browser" Height="760" VerticalAlignment="Top"></phone:WebBrowser> 

回答

9

我有同樣的問題。 @Akash卡瓦的答案几乎是正確的,但這是正確的javascript來閱讀html標題:

String title = (string)browser.InvokeScript("eval", "document.title.toString()"); 
+0

正如David所說,要正常工作,必須在** WebBrowser.LoadCompleted **事件處理程序中調用。此外,由於這是在事件處理程序中執行的,因此如果正在更新UI,則應在WPF的「Control.Invoke」或Silverlight/Windows Phone的「Dispatcher.Invoke」的操作內調用上述代碼。 – Ben

0

您可以使用InvokeScript獲得標題,

String title = browser.InvokeScript("document.title"); 

我不知道它的正確與否,但你也可以試試window.title。

+0

我嘗試了'LoadCompleted'事件,並且引發了一個未知的異常。 – BrunoLM

+0

您必須按照msdn文檔啓用腳本,並且只能在加載文檔後調用此方法,因此如果文檔尚未準備好,您必須等待某個時間。 –

+1

我嘗試在接收導航事件時調用此函數,並得到一個讀取「錯誤:80020006」的異常。是的,我的XAML中有IsScriptEnabled =「True」。 – tronman

0

我敢肯定,

String title = browser.Document.Title; 

應該做的伎倆。

請參閱here

+0

以D開頭的屬性:DataContext,DesiredSize,Dispatcher,DoubleTap。 (Microsoft.Phone.Controls)。 xaml標籤:'' – BrunoLM

+1

對不起,正在考慮常規Forms WebBrowser控件。您是否嘗試過@Akash Kava的答案,但將「IsScriptEnabled」屬性設置爲「true」? –

+0

是的,相同的結果... – BrunoLM

2

對我來說,下面的代碼工作。 @Akash和@Mikko的答案讓我走上了正確的道路,但我仍然遇到了一些網站的問題。這個問題據我所知是當WebBrowser組件開始從遠程服務器獲取數據時引發Navigated事件。因此,DOM對象尚未完成,因此調用document.title會引發錯誤。所以我只是在幾毫秒後重試,直到獲得標題。這個「循環」在我測試的任何網站上從未迭代超過3次,每次都完美地給我帶來了標題。

private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem(UpdateText); 
} 

private void UpdateText(object o) 
{ 
    Thread.Sleep(100); 
    Dispatcher.BeginInvoke(() => 
    { 
     try 
     { 
      textBlock1.Text = webBrowser1.InvokeScript("eval", "document.title").ToString(); 
     } 
     catch (SystemException) 
     { 
      ThreadPool.QueueUserWorkItem(UpdateText); 
     } 
    }); 
} 
0

下面的代碼對我的作品,注意航行時,如果使用加載它會觸發加載頁面之前,你希望那對某個觸發「之後的」頁面完全加載,導航行爲那樣的事件。

private void web1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     //Added thread using "using System.Thread", to act as a buffer for any page delay. 
     Thread.Sleep(2000); 
     String title = (string)web1.InvokeScript("eval", "document.title"); 
     PageTitle.Text = title; 

    } 
1

所有答案不是100%正確的:

您必須調用如下

字符串title =(字符串)browser.InvokeScript( 「EVAL」,「document.title.toString( )「);

LoadCompleted事件的瀏覽器,而不是在導航事件。

相關問題