繁体   English   中英

单击链接时,如何在“ Webbrowser”事件中获取链接属性(页面名称)?

[英]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”上的链接。
-浏览器。 打开页面“ Page_2”,滚动到“ Paragraph_N”(“ N”取决于页面上的哪个段落是“ Page_1”)

我计划使用链接“ anchor”进行的页面之间的过渡

<a href="text.html#bottom"> Go to the bottom of the text </a>  

我认为要执行此逻辑,需要应用程序执行以下操作:
-跟踪事件“单击链接”;
-从链接中提取链接所引用页面的名称(“ text.html”);
-根据名称从数据库中提取页面;

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

问题
1.单击链接后,如何在“ Webbrowser”事件中获取链接属性(页面名称)?
2.执行此逻辑的更合理的方法是什么(从页面“ Page_1”到页面“ Page_2”)?
3.0单击链接时如何进行以下操作:
3.1。 如果链接到网站-在Chrome中打开?
3.2。 如果从数据库链接到页面-在“ webBrowser1”中打开?
3.3。 如果链接到数据库中页面的段落-在
“ webBrowser1”并将滚动条滚动到所需的段落?
图片

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

假设您的Webbrowser名为webBrowser1

您需要将C#对象暴露给JavaScript可以直接调用的WebBrowser,该对象必须将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    
    }
}

配置您的Webbrowser:

webBrowser1.ObjectForScripting = new ScriptInterface();

现在,在您的js中,您可以通过以下方式调用OnAnchorClick方法:

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

其他有用的参考:

如何通过webbrowser控件为winforms处理javascript事件

如何在浏览器控件中注入JavaScript

从C调用Web浏览器控件中的JavaScript

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM