Подтвердить что ты не робот

Как получить заголовок страницы в элементе управления 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>
4b9b3361

Ответ 1

У меня была та же проблема. @Akash Kava ответ почти правильный, но это правильный javascript, чтобы прочитать заголовок html:

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

Ответ 2

Для меня работает следующий код. Ответы @Akash и @Mikko поставили меня на правильный путь, но у меня все еще были проблемы с несколькими веб-сайтами. Проблема, насколько я понимаю, в том, что событие Navigated возникает, когда компонент WebBrowser начинает получать данные с удаленного сервера. Таким образом, объект DOM еще не завершен, поэтому вызов document.title вызывает ошибку. Поэтому я просто повторяю через несколько миллисекунд, пока не получу название. Этот "цикл" никогда не повторялся более трех раз на любом веб-сайте, который я тестировал, и безупречно приносил мне титул каждый раз.

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

Ответ 3

Все ответы не на 100% правильны:

Вы должны вызвать следующее:

Строка title= (строка) browser.InvokeScript( "eval", "document.title.toString()" );

в событии LoadCompleted браузера, а не в навигационном событии.

Ответ 4

Вы можете использовать InvokeScript, чтобы получить название как

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

Я не знаю, что это правильно или нет, но вы также можете попробовать window.title.

Ответ 5

Я уверен, что

String title = browser.Document.Title;

должен сделать трюк.

Смотрите здесь.

Ответ 6

Код ниже работает для меня, обратите внимание на навигационное событие, если вы используете его, он будет запускаться непосредственно перед загрузкой страницы, вы хотите, чтобы это было когда-то "после того, как страница" Полностью загружена ", navigated выступает в качестве этого события.

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;

    }