How can I get the page title in WebBrowser control?

旧巷老猫 提交于 2019-12-21 03:47:06

问题


How can I get the page title in a WebBrowser control when I navigate to different websites?


xmlns

xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"

Properties starting with D

DataContext
DesiredSize
Dispatcher
DoubleTap

xaml tag

<phone:WebBrowser Name="browser" Height="760" VerticalAlignment="Top"></phone:WebBrowser>

回答1:


I had the same problem. @Akash Kava's answer is almost correct but this is the correct javascript to read the html title:

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



回答2:


For me the following code works. The answers from @Akash and @Mikko set me on the right path, but I still had some problems with a few websites. The problem as I understand it is that the Navigated event is raised when the WebBrowser component starts getting data from the remote server. As such the DOM object is not yet complete, so calling the document.title throws an error. So I just retry after a few milliseconds till I get the title. This "loop" has never iterated more than 3 times on any website I tested and flawlessly brought me the title every time.

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:


All answers are not 100% correct:

You must call the following:

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

in the LoadCompleted event of the browser, and not in the navigated event.




回答4:


You can use InvokeScript to get title as,

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

I don't know it's correct or not but you can try window.title too.




回答5:


I'm pretty sure that

String title = browser.Document.Title;

should do the trick.

See here.




回答6:


The code below works for me, note the navigated event, if you use loaded it will trigger just before the page is loaded, you want that to trigger sometime "after" the page is Fully Loaded, navigated acts as that event.

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;

    }


来源:https://stackoverflow.com/questions/7699381/how-can-i-get-the-page-title-in-webbrowser-control

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!