2010-07-13 56 views
5

我遇到了問題,試圖從C#中的WebBrowser獲取文檔標題。它在VB.NET中工作正常,但它不會給我任何C#中的屬性。C#:如何從WebBrowser元素獲取文檔標題?

當我輸入MyBrowser.Document。,我得到的唯一選項是4個方法:Equals,GetHashCode,GetType和ToString - 沒有屬性。

我認爲這是因爲我必須先將文檔分配給新的實例,但我找不到VB.NET中存在的HTMLDocument類。

基本上我想要做的是每次WebBrowser加載/重新加載頁面時返回Document.Title。

有人可以幫忙嗎?這將非常感謝!

這裏是我此刻的代碼...

private void Link_Click(object sender, RoutedEventArgs e) 
{ 
    WebBrowser tempBrowser = new WebBrowser(); 
    tempBrowser.HorizontalAlignment = HorizontalAlignment.Left; 
    tempBrowser.Margin = new Thickness(-4, -4, -4, -4); 
    tempBrowser.Name = "MyBrowser"; 
    tempBrowser.VerticalAlignment = VerticalAlignment.Top; 
    tempBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(tempBrowser_LoadCompleted); 

    tempTab.Content = tempBrowser; // this is just a TabControl that contains the WebBrowser 

    Uri tempURI = new Uri("http://www.google.com"); 
    tempBrowser.Navigate(tempURI); 
} 

private void tempBrowser_LoadCompleted(object sender, EventArgs e) 
{ 
    if (sender is WebBrowser) 
    { 
     MessageBox.Show("Test"); 
     currentBrowser = (WebBrowser)sender; 
     System.Windows.Forms.HtmlDocument tempDoc = (System.Windows.Forms.HtmlDocument)currentBrowser.Document; 
     MessageBox.Show(tempDoc.Title); 
    } 
} 

這個代碼不給我任何錯誤,但我從來沒有看到第二個消息框。我確實看到了第一個(「測試」消息),所以程序正在進入該代碼塊。

+0

你需要做投HTMLDocument的。 – Mau 2010-07-13 15:40:07

+0

請向我們展示您的代碼。 – SLaks 2010-07-13 15:42:16

回答

2

您沒有使用Windows窗體WebBrowser控件。我認爲你得到了ieframe.dll的COM包裝,它的名字是AxWebBrowser。通過在解決方案資源管理器窗口中打開參考節點來驗證。如果你看到AxSHDocVw,那麼你得到了錯誤的控制。這是相當不友好的,它只是給你一個不透明的Document屬性的接口指針。你確實只會得到默認的對象類成員。

查看工具箱。選擇WebBrowser而不是「Microsoft Web Browser」。

+0

Hans,解決方案資源管理器顯示SHDocVw。我的應用程序是在WPF中,我只用默認的WebBrowser控件。我是否需要添加「使用System.Windows.Forms」引用並使用該WebBrowser? – 2010-07-13 17:35:13

+0

那麼,就是這樣。檢查此:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/e60b671e-84e6-40a4-a37a-e0a8610aef44 – 2010-07-13 17:39:51

+0

謝謝,我會查看鏈接,看看我能做些什麼。然而,我覺得奇怪的是,我對當前的代碼做了更多的工作,並沒有發現任何錯誤,但是我沒有得到我想要做的事情。你可以看看我上面編輯的文章中的代碼,看看有沒有什麼東西可以與它一起看?這可能是不可能的,但我認爲如果是這樣的話,它會給我一個錯誤信息。 – 2010-07-13 18:18:17

0
string title = ((HTMLDocument)MyBrowser.Document).Title 

或者

HTMLDocument Doc = (HTMLDocument)MyBrowser.Document.Title ; 
string title = doc.Title; 
4

添加參考Microsoft.mshtml

添加事件接收器LoadCompleted

webbrowser.LoadCompleted += new LoadCompletedEventHandler(webbrowser_LoadCompleted); 

然後,你將有文件沒有問題,沒有被加載,以便讀取值回了

void webbrowser_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     // Get the document title and display it 
     if (webbrowser.Document != null) 
     { 
      mshtml.IHTMLDocument2 doc = webbrowser.Document as mshtml.IHTMLDocument2; 
      Informative.Text = doc.title; 
     } 
    } 
0

LoadCompleted不會觸發。你應該使用Navigated事件處理程序來代替它。

webBrowser.Navigated += new NavigatedEventHandler(WebBrowser_Navigated); 

(...) 

private void WebBrowser_Navigated(object sender, NavigationEventArgs e) 
{ 
     HTMLDocument doc = ((WebBrowser)sender).Document as HTMLDocument; 

     foreach (IHTMLElement elem in doc.all) 
     { 
      (...) 
     } 
     // you may have to dispose WebBrowser object on exit 
} 
0

最後用效果很好:

using System.Windows.Forms; 

...

WebBrowser CtrlWebBrowser = new WebBrowser(); 

...

CtrlWebBrowser.Document.Title = "Hello World"; 
MessageBox.Show(CtrlWebBrowser.Document.Title);