C#导航到WebBrowser控件中的Anchors

时间:2009-09-18 00:47:45

标签: c# winforms webbrowser-control

我们的Winforms应用程序中有一个Web浏览器,可以很好地显示xslt呈现的所选项目的历史记录。

xslt正在写出< a>输出的html中的标记允许webBrowser控件导航到选定的历史记录条目。

由于我们没有在严格的网络意义上“导航”到html,而是通过DocumentText设置html,因此无法使用#AnchorName“导航”到所需的锚点,因为webBrowser的Url为null(编辑:实际上在完成时它是:空白)。

在这种情况下,如何动态导航到Web浏览器控件的html中的Anchor标签?

修改

感谢sdolphion提示,这是我使用的最终代码

void _history_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        _completed = true;
        if (!string.IsNullOrEmpty(_requestedAnchor))
        {
            JumpToRequestedAnchor();
            return;
        }
    }

    private void JumpToRequestedAnchor()
    {
        HtmlElementCollection elements = _history.Document.GetElementsByTagName("A");
        foreach (HtmlElement element in elements)
        {
            if (element.GetAttribute("Name") == _requestedAnchor)
            {
                element.ScrollIntoView(true);
                return;
            }
        }
    }

2 个答案:

答案 0 :(得分:10)

我相信有人有更好的方法可以做到这一点,但这是我用来完成这项任务的。

HtmlElementCollection elements = this.webBrowser.Document.Body.All;
foreach(HtmlElement element in elements){
   string nameAttribute = element.GetAttribute("Name");
   if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == section){
      element.ScrollIntoView(true);
      break;
   }
}

答案 1 :(得分:5)

我知道这个问题已经很久了,并且答案很好,但是还没有提出这个问题,所以对于那些来这里寻找答案的人来说可能会有用。

另一种方法是使用HTML中的元素id。

<p id="section1">This is a test section</p>

然后你可以使用

HtmlElement sectionAnchor = webBrowserPreview.Document.GetElementById("section1");
if (sectionAnchor != null)
{
    sectionAnchor.ScrollIntoView(true);
}

其中webBrowserPreview是您的WebBrowser控件。

或者,sectionAnchor.ScrollIntoView(false)只会将元素放在屏幕上,而不是将其与页面顶部对齐