2010-07-13 7 views
5

Ich habe Probleme, den Dokumenttitel von einem Webbrowser in C# zu erhalten. Es funktioniert gut in VB.NET, aber es gibt mir keine Eigenschaften in C#.C#: Wie bekomme ich den Dokumenttitel von einem WebBrowser-Element?

Wenn ich tippe MyBrowser.Document., die einzigen Optionen, die ich bekomme, sind 4 Methoden: Equals, GetHashCode, GetType und ToString - keine Eigenschaften.

Ich denke, es ist, weil ich das Dokument zuerst einer neuen Instanz zuweisen muss, aber ich kann die HTMLDocument-Klasse nicht finden, die in VB.NET existiert.

Grundsätzlich möchte ich das Document.Title jedes Mal zurückgeben, wenn der WebBrowser eine Seite lädt/neu lädt.

Kann jemand bitte helfen? Es wird sehr geschätzt werden! Hier

ist der Code, den ich im Moment haben ...

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); 
    } 
} 

Dieser Code nicht geben Sie mir alle Fehler, aber ich habe nie die zweite MessageBox sehen. Ich sehe jedoch die erste (die "Test" -Nachricht), so dass das Programm zu diesem Codeblock gelangt.

+0

Sie benötigen einen Guss tun Htmldocument. – Mau

+0

Bitte zeigen Sie uns Ihren Code. – SLaks

Antwort

2

Sie sind nicht die Verwendung von Windows Forms-WebBrowser-Steuerelement. Ich denke, Sie haben den COM-Wrapper für ieframe.dll, sein Name ist AxWebBrowser. Überprüfen Sie dies, indem Sie den Knoten Verweise im Projektmappen-Explorer öffnen. Wenn Sie AxSHDocVw sehen, haben Sie die falsche Kontrolle. Es ist ziemlich unfreundlich, es gibt Ihnen nur einen undurchsichtigen Schnittstellenzeiger für die Document-Eigenschaft. Sie werden tatsächlich nur die Standardobjektklassenmitglieder erhalten.

In der Toolbox suchen. Wählen Sie WebBrowser statt "Microsoft Web Browser".

+0

Hans, der Solution Explorer zeigt SHDocVw. Meine App befindet sich in WPF, und ich habe einfach das Standard-WebBrowser-Steuerelement darin verwendet. Muss ich die Referenz "using System.Windows.Forms" hinzufügen und stattdessen diesen WebBrowser verwenden? –

+0

Nun, das ist es dann. Überprüfen Sie dies: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/e60b671e-84e6-40a4-a37-e0a8610aef44 –

+0

Danke, ich werde in den Link schauen und sehen, was ich tun kann. Was ich allerdings merkwürdig finde, ist, dass ich ein bisschen mehr an meinem aktuellen Code gearbeitet habe, und ich bekomme keine Fehler, aber ich bekomme auch nicht, was ich versuche. Kannst du dir den Code in meinem editierten Post oben ansehen und sehen, ob irgendetwas damit aussieht? Es kann sein, dass es einfach nicht möglich ist, aber ich würde denken, dass es mir eine Fehlermeldung geben würde, wenn das der Fall wäre. –

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

Oder

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

In Bezug auf Microsoft.mshtml

hinzufügen Ereignisempfänger für Loadcompleted

webbrowser.LoadCompleted += new LoadCompletedEventHandler(webbrowser_LoadCompleted); 

Dann werden Sie keine Probleme mit dem Dokument nicht haben, um Werte zu lesen

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
wieder heraus geladen

LoadCompleted wird nicht ausgelöst. Sie sollten stattdessen den Navigated-Ereignishandler verwenden.

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

arbeitet schließlich gut mit:

using System.Windows.Forms; 

...

WebBrowser CtrlWebBrowser = new WebBrowser(); 

...

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