单击 link 时如何在 "Webbrowser" 事件中获取 link 属性(页面名称)?

How do I get the link attributes (page name) in the "Webbrowser" event when I click a link?

我打算做一个内容管理系统。
系统构成:
- 按类别分类的页面树。 (按类别分类的页面树);
- 网页浏览器。 (网页浏览器);

页面内容:
- 格式化文本;
- 图片;
- 参考;

HTML 格式的文本存储在数据库中。
类别树显示从数据库到 Web 浏览器的文本。

需要在页面之间进行转换。

即从"Page_1"页过渡到"Page_2"页的必要段落 逻辑:
- 用户。它在第 "Page_1".
页上 - 用户。单击页面 "Page_1" 上的 link。
- 浏览器。打开页面 "Page_2",滚动到 "Paragraph_N"("N" 取决于页面上的段落是 "Page_1")

我打算用 links "anchor"

做的页面之间的过渡
<a href="text.html#bottom"> Go to the bottom of the text </a>  

我认为要执行此逻辑,需要应用程序执行以下操作:
- 跟踪事件 "clicking on the link";
- 从 link 中提取 link;
引用的页面名称 ("text.html") - 根据名称从数据库中提取页面;

示例 HTML 代码 "Page1" 和 "Page 2"
https://codeshare.io/2Bb03L

问题
1、点击link时,如何获取"Webbrowser"事件中的link属性(页面名称)?
2. 执行此逻辑(从第 "Page_1" 页到第 "Page_2" 页)更合理的方法是什么?
3.0 如何在点击link时进行如下操作:
3.1.如果 link 到站点 - 在 Chrome?
中打开 3.2.如果 link 从数据库到页面 - 在 "webBrowser1"?
中打开 3.3.如link要从数据库中打开的那段页面-在
中打开 "webBrowser1" 然后将滚动条滚动到所需的段落?
image

回答您的第一个问题“当我单击 link 时,如何在 "Webbrowser" 事件中获取 link 属性(页面名称)?":

假设您的 Webbrowser 名为 webBrowser1:

您需要向 JavaScript 可以直接调用的 WebBrowser 公开一个 C# 对象,该对象必须将 ComVisibleAttribute 设置为 true。

[System.Runtime.InteropServices.ComVisible(true)]
public class ScriptInterface
{
    public void OnAnchorClick(string href)
    {
        var parts = href.Split('#');
        var pageName = parts[0];
        //do whatever with page name    
    }
}

配置您的网络浏览器:

webBrowser1.ObjectForScripting = new ScriptInterface();

现在在你的 js 中你可以这样调用 OnAnchorClick 方法:

document.getElementsByTagName('a')[0].onclick = function(){
   window.external.OnAnchorClick(this.href);
   return false;
}

其他有用的参考资料:

how-to-handle-javascript-events-via-webbrowser-control-for-winforms

how-to-inject-javascript-in-webbrowser-control

calling-javascript-in-a-webbrowser-control-from-c#