【问题标题】:How do I get the link attributes (page name) in the "Webbrowser" event when I click a link?单击链接时,如何在“Webbrowser”事件中获取链接属性(页面名称)?
【发布时间】:2018-05-11 14:07:49
【问题描述】:

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

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

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

需要在页面之间进行过渡。

即从页面“Page_1”过渡到页面“Page_2”的必要段落 逻辑:
- 用户。它在“Page_1”页上。
- 用户。点击“Page_1”页面上的链接。
- 浏览器。打开页面“Page_2”,滚动到“Paragraph_N”(“N”取决于页面上的哪个段落是“Page_1”)

我打算用链接“锚”做的页面之间的过渡

<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" 并将滚动条滚动到所需的段落?
image

【问题讨论】:

  • 查看WebBrowser.Navigating 事件。 WebBrowserNavigatingEventArgs 为您提供浏览器要访问的 URL,e.Cancel 属性允许您中断操作。使用 URL 从源中获取页面并将其传递给 WebBrowser。 Navigating 事件应该包含一些逻辑来理解您的代码何时引发事件,例如bool ItsMe = true。第二个问题暗示有一种不合理的方法可以做到这一点。
  • @Jimi 更新了问题。我不明白。我是初学者,我不打算使用 Web 服务器。我只放置“URL”页面的名称。单击链接时如何进行以下操作: 1. 如果链接到该站点 - 在 Chrome 中打开。 2. 如果从数据库到页面的链接 - 在“webBrowser1”中打开 3. 如果从数据库到页面的段落链接 - 在“webBrowser1”中打开并滚动滚动到所需的段落。示例 HTML 代码“第 1 页”和“第 2 页”codeshare.io/2Bb03L 你能举个例子吗?
  • 我从未提到过 Web 服务器。 Href 标签有自己的语法,你需要遵守。 Study it a little。按照链接到WebBrowser.Navigating,查看它是如何工作的,搜索 Google 和 SO 以获取示例。你会发现很多。当您遇到特定的编码问题时,请发布一个特定的问题(顺便说一句,您已经发布了这个问题)。
  • 请看How to Ask。不要在一篇文章中提出多个问题。

标签: c# winforms webbrowser-control


【解决方案1】:

回答您的第一个问题“我如何在点击链接时在“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    
    }
}

配置您的网络浏览器:

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#

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2019-09-16
    • 2016-01-20
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多