单击 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
我打算做一个内容管理系统。
系统构成:
- 按类别分类的页面树。 (按类别分类的页面树);
- 网页浏览器。 (网页浏览器);
页面内容:
- 格式化文本;
- 图片;
- 参考;
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