我们的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;
}
}
}
答案 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)
只会将元素放在屏幕上,而不是将其与页面顶部对齐