C#:如何从WebBrowser元素获取文档标题?

时间:2010-07-13 15:39:08

标签: c# browser document title

我在尝试从C#中的WebBrowser获取文档标题时遇到问题。它在VB.NET中运行良好,但它不会给我任何C#属性。

当我输入 MyBrowser.Document。时,我得到的唯一选项是4种方法:Equals,GetHashCode,GetType和ToString - 没有属性。

我认为这是因为我必须首先将文档分配给新实例,但我找不到VB.NET中存在的HTMLDocument类。

基本上我想要做的是每次WebBrowser加载/重新加载页面时都返回Document.Title。

有人可以帮忙吗?非常感谢!

这是我目前的代码......

private void Link_Click(object sender, RoutedEventArgs e)
{
    WebBrowser tempBrowser = new WebBrowser();
    tempBrowser.HorizontalAlignment = HorizontalAlignment.Left;
    tempBrowser.Margin = new Thickness(-4, -4, -4, -4);
    tempBrowser.Name = "MyBrowser";
    tempBrowser.VerticalAlignment = VerticalAlignment.Top;
    tempBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(tempBrowser_LoadCompleted);

    tempTab.Content = tempBrowser; // this is just a TabControl that contains the WebBrowser

    Uri tempURI = new Uri("http://www.google.com");
    tempBrowser.Navigate(tempURI);
}

private void tempBrowser_LoadCompleted(object sender, EventArgs e)
{
    if (sender is WebBrowser)
    {
        MessageBox.Show("Test");
        currentBrowser = (WebBrowser)sender;
        System.Windows.Forms.HtmlDocument tempDoc = (System.Windows.Forms.HtmlDocument)currentBrowser.Document;
        MessageBox.Show(tempDoc.Title);
    }
}

此代码不会给我任何错误,但我从未看到第二个MessageBox。我确实看到了第一个(“测试”消息),所以程序正在进入该代码块。

5 个答案:

答案 0 :(得分:4)

添加对Microsoft.mshtml的引用

为LoadCompleted添加事件接收器

webbrowser.LoadCompleted += new LoadCompletedEventHandler(webbrowser_LoadCompleted);

然后,您可以没有加载文档以便读取值

    void webbrowser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        // Get the document title and display it
        if (webbrowser.Document != null)
        {
            mshtml.IHTMLDocument2 doc = webbrowser.Document as mshtml.IHTMLDocument2;
            Informative.Text = doc.title;
        }
    }

答案 1 :(得分:2)

您没有使用Windows窗体WebBrowser控件。我想你有ieframe.dll的COM包装器,它的名字是AxWebBrowser。通过在“解决方案资源管理器”窗口中打开“引用”节点来验证如果你看到AxSHDocVw那么你得到了错误的控制。它非常不友好,它只是为Document属性提供了一个不透明的接口指针。您确实只会获得默认的对象类成员。

查看工具箱。选择WebBrowser而不是“Microsoft Web Browser”。

答案 2 :(得分:0)

string title = ((HTMLDocument)MyBrowser.Document).Title

或者

HTMLDocument Doc =  (HTMLDocument)MyBrowser.Document.Title ;
string title = doc.Title;

答案 3 :(得分:0)

LoadCompleted不会触发。您应该使用Navigated事件处理程序而不是它。

webBrowser.Navigated += new NavigatedEventHandler(WebBrowser_Navigated);

(...)

private void WebBrowser_Navigated(object sender, NavigationEventArgs e)
{
        HTMLDocument doc = ((WebBrowser)sender).Document as HTMLDocument;

        foreach (IHTMLElement elem in doc.all)
        {
            (...)
        }
        // you may have to dispose WebBrowser object on exit
}

答案 4 :(得分:0)

最后适用于:

using System.Windows.Forms;

...

WebBrowser CtrlWebBrowser = new WebBrowser();

...

CtrlWebBrowser.Document.Title = "Hello World";
MessageBox.Show( CtrlWebBrowser.Document.Title );