C #: Как я могу получить заголовок документа из элемента WebBrowser? - PullRequest
5 голосов
/ 13 июля 2010

У меня проблемы с попыткой получить заголовок документа из WebBrowser в C #. Он отлично работает в VB.NET, но не дает мне никаких свойств в C #.

Когда я набираю MyBrowser.Document. , единственные параметры, которые я получаю, - это 4 метода: Equals, GetHashCode, GetType и ToString - без свойств.

Я думаю, это потому, что мне нужно сначала назначить документ новому экземпляру, но я не могу найти класс HTMLDocument, который существует в VB.NET.

По сути, я хочу возвращать Document.Title каждый раз, когда WebBrowser загружает / перезагружает страницу.

Может кто-нибудь помочь, пожалуйста? Это будет высоко ценится!

Вот код, который у меня есть на данный момент ...

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

Этот код не дает мне никаких ошибок, но я никогда не вижу второй MessageBox. Хотя я вижу первое (сообщение «Тест»), поэтому программа переходит к этому блоку кода.

Ответы [ 5 ]

4 голосов
/ 25 июня 2012

Добавить ссылку на 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;
        }
    }
2 голосов
/ 13 июля 2010

Вы не используете элемент управления Windows Forms WebBrowser. Я думаю, что вы получили оболочку COM для ieframe.dll, его имя AxWebBrowser. Проверьте это, открыв узел «Ссылки» в окне обозревателя решений. Если вы видите AxSHDocVw, значит, у вас неправильный контроль. Это довольно недружелюбно, просто дает непрозрачный указатель интерфейса для свойства Document. Вы действительно получите только члены класса объекта по умолчанию.

Посмотрите на панели инструментов. Выберите «Веб-браузер» вместо «Веб-браузер Microsoft».

0 голосов
/ 12 июля 2015

Наконец-то хорошо работает с:

using System.Windows.Forms;

...

WebBrowser CtrlWebBrowser = new WebBrowser();

...

CtrlWebBrowser.Document.Title = "Hello World";
MessageBox.Show( CtrlWebBrowser.Document.Title );
0 голосов
/ 11 февраля 2013

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 голосов
/ 13 июля 2010
string title = ((HTMLDocument)MyBrowser.Document).Title

Или

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