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