我想保持的回答尽可能干净,所以我完全重写了答案。我相信你需要做以下步骤:
订阅称为Navigating和DocumentCompleted
使用代码来解析URL的活动,并通过#
覆盖导航分裂,并给了web浏览器的新没有锚点的干净的URL
将锚点存储在变量中例如
在文件加载后,只需找到锚点引用的元素并滚动到它即可
结果可能如下所示。请注意,这不是一个复制&粘贴代码,我只是想给你一个想法如何完成你的事情。您需要修改此代码以满足您的需求!
假设所请求的URL是myFile.html#customAnchor
webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.Contains("#")
{
string[] urlParts = e.Url.Split('#'); // split the string by character #
string newUrl = urlParts[0]; // = myFile.html
_somePrivateField = urlParts[1]; // = customAnchor
webBrowser1.Navigate(new Uri(newUrl));
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElementCollection elements = this.webBrowser1.Document.Body.All;
foreach(HtmlElement element in elements){
string nameAttribute = element.GetAttribute("Name");
if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == _somePrivateField){
element.ScrollIntoView(true);
break;
}
}
}
还没有真正尝试过这一点,但我希望这将有助于你足够的解决您的问题。