2010-07-13 21 views
5

Sto riscontrando problemi nel tentativo di ottenere il titolo del documento da un browser web in C#. Funziona bene in VB.NET, ma non mi darà alcuna proprietà in C#.C#: come ottengo il titolo del documento da un elemento WebBrowser?

Quando si digita MyBrowser.Document., le uniche opzioni che ottengo sono 4 metodi: uguale, GetHashCode, GetType e ToString - nessuna proprietà.

Penso che sia perché devo prima assegnare il documento a una nuova istanza, ma non riesco a trovare la classe HTMLDocument che esiste in VB.NET.

Fondamentalmente quello che voglio fare è restituire il Documento.Titolo ogni volta che WebBrowser carica/ricarica una pagina.

Qualcuno può aiutare per favore? Sarebbe molto apprezzato!

Ecco il codice che ho in questo momento ...

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

Questo codice non mi dà errori, ma non ho mai vedere la seconda MessageBox. Tuttavia, vedo il primo (il messaggio "Test"), quindi il programma sta arrivando a quel blocco di codice.

+0

È necessario fare un cast HTMLDocument. – Mau

+0

Mostraci il tuo codice. – SLaks

risposta

2

Non si sta utilizzando Windows Form controllo WebBrowser. Penso che tu abbia il wrapper COM per ieframe.dll, il suo nome è AxWebBrowser. Verificare che aprendo il nodo Riferimenti nella finestra Esplora soluzioni. Se vedi AxSHDocVw hai il controllo sbagliato. È piuttosto ostile, ti dà solo un puntatore opaco all'interfaccia per la proprietà Document. In effetti, otterrai solo i membri della classe oggetto predefinita.

Cerca nella casella degli strumenti. Seleziona WebBrowser invece di "Microsoft Web Browser".

+0

Hans, Solution Explorer mostra SHDocVw. La mia app è in WPF e ho usato solo il controllo predefinito WebBrowser. Devo aggiungere il riferimento "using System.Windows.Forms" e utilizzare invece WebBrowser? –

+0

Bene, è così. Controlla questo: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/e60b671e-84e6-40a4-a37a-e0a8610aef44 –

+0

Grazie, esaminerò il collegamento e vedrò cosa posso fare. Quello che trovo strano, tuttavia, è che ho lavorato un po 'di più sul mio codice attuale, e non ho alcun errore, ma non sto ottenendo quello che ho provato a fare. Puoi guardare il codice nel mio post modificato sopra e vedere se qualcosa sembra fuori con esso? Può essere che non sia possibile, ma penserei che mi darebbe un messaggio di errore se fosse il caso. –

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

O

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

Aggiungi riferimento per Microsoft.mshtml

Aggiungi ricevitore di eventi per LoadCompleted

webbrowser.LoadCompleted += new LoadCompletedEventHandler(webbrowser_LoadCompleted); 

Allora non avrete problemi con documento non viene caricata per leggere i valori di nuovo fuori

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 non attiva. Dovresti usare il gestore di eventi Navigated al posto di esso.

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

finalmente funziona bene con:

using System.Windows.Forms; 

...

WebBrowser CtrlWebBrowser = new WebBrowser(); 

...

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