C# 导航到 WebBrowser 控件中的锚点

Posted

技术标签:

【中文标题】C# 导航到 WebBrowser 控件中的锚点【英文标题】:C# Navigate to Anchors in WebBrowser control 【发布时间】:2010-11-29 08:24:52 【问题描述】:

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

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

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

在这种情况下,如何动态导航到 Web Browser 控件的 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;
            
        
    

【问题讨论】:

【参考方案1】:

我确信有人有更好的方法来做这件事,但这是我用来完成这项任务的方法。

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;
   

【讨论】:

刚刚在网上找到了一个参考,现在正在测试它。确认后将标记为答案。 虽然我使用的是 Document.GetElementByName 而不是循环 感谢您发回您的更新,我更改了我的更新以更接近您的更新。【参考方案2】:

我知道这个问题已经过时并且有很好的答案,但还没有建议,所以它可能对其他来这里寻找答案的人有用。

另一种方法是使用 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) 只会将元素显示在屏幕上,而不是将其与页面顶部对齐

【讨论】:

原谅我的无知。 webBrowserPreview 是在哪里定义的? 哇,真不敢相信我错过了,之前没有人注意到。它是表单中的 WebBrowser 控件。我已在我的回答中添加了说明。

以上是关于C# 导航到 WebBrowser 控件中的锚点的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 react-router 的锚点

使用带反应路由器的锚点

React SPA 中的锚点或按钮?

如何将 HTML 页面滚动到给定的锚点

在 C# winforms 中的同一表单上从一个 webBrowser 导航到另一个 webBrowser

导航后 C# WebBrowser 不同的 html 文档