如何在WebBrowser控件中获取页面标题?

时间:2011-10-08 19:52:29

标签: c# windows-phone-7 browser windows-phone-7.1

当我导航到不同的网站时,如何在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 个答案:

答案 0 :(得分:9)

我遇到了同样的问题。 @Akash Kava的答案几乎是正确的,但这是正确的javascript来阅读HTML标题:

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

答案 1 :(得分:2)

对我来说,以下代码有效。来自@Akash和@Mikko的答案让我走上了正确的道路,但我仍然遇到了一些网站的问题。我理解的问题是,当WebBrowser组件开始从远程服务器获取数据时,会引发Navigated事件。因此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);
        }
    });
}

答案 2 :(得分:1)

所有答案都不是100%正确:

您必须拨打以下电话:

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

在浏览器的 LoadCompleted 事件中,而不在导航事件中。

答案 3 :(得分:0)

您可以使用InvokeScript将标题作为

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

我不知道它是否正确,但您也可以尝试使用window.title。

答案 4 :(得分:0)

我很确定

String title = browser.Document.Title;

应该这样做。

请参阅here

答案 5 :(得分:0)

下面的代码对我有用,请注意导航事件,如果使用加载它将在页面加载之前触发,您希望在“完全加载”页面之后的某个时间触发,导航充当该事件。

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;

    }