Как получить заголовок страницы в элементе управления WebBrowser? - PullRequest
12 голосов
/ 08 октября 2011

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

Ответы [ 6 ]

9 голосов
/ 23 декабря 2011

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

String title = (string)browser.InvokeScript("eval", "document.title.toString()");
2 голосов
/ 07 января 2012

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

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);
        }
    });
}
1 голос
/ 12 июня 2013

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

Вы должны позвонить по следующему номеру:

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

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

0 голосов
/ 17 апреля 2013

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

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;

    }
0 голосов
/ 09 октября 2011

Я почти уверен, что

String title = browser.Document.Title;

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

См. здесь .

0 голосов
/ 09 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...