【问题标题】:How to share information between cooperating Firefox WebExtensions如何在合作的 Firefox WebExtensions 之间共享信息
【发布时间】:2017-10-26 11:18:02
【问题描述】:

我想为 Firefox 创建一个简单的扩展。

  1. 用户将鼠标悬停在任何页面上的某个词上

  2. 从扩展名中的文件中提取该单词的字典定义

  3. 在悬停时显示它

我是 Firefox 插件和 WebExtensions 的新手,所以我想知道的是:

我希望字典扩展使用的文件是本地的,而不是每次都引用某个在线网站。

任何给定的用户可能对整个字典的不同部分感兴趣(它包含不同语言的条目,用户可能只想要自己的 1 或 2 种语言)所以我想避免强迫每个用户下载整个字典库.

在 Firefox 5.* 之前,我看到类似的附加组件处理的方式是,它们提供的搜索和显示附加组件与字典文件分开,每个字典文件都可以作为附加组件使用,只有在您安装了主插件后才能真正做事。

但是,这些示例似乎都没有针对 WebExtensions API 进行更新,并且不支持更新版本的 Firefox。 到目前为止,我还无法找到如何在网络扩展之间进行通信。

我的问题是,我如何在 2 个或更多合作扩展之间共享信息以实现我所描述的。 实际上,如果由于某种我不知道的原因这看起来真的很愚蠢,请指出任何更合理的替代方案,使我能够将字典文件与主扩展分开处理

我发现的可能相关的问题: Communicating between 2 Firefox Add-Ons (Cross-Extension Communication) 然而,这是 2010 年的,因此据我所知已经过时了。

Mozilla Addon Development - Communicating between windows with different domains 有点类似的情况,但他们想从在线资源而不是本地资源中提取定义。

我在 Mozilla 浏览器扩展网站上发现的最接近的东西是插件和一些本机应用程序之间的通信,这并不是我认为的需要。

【问题讨论】:

    标签: firefox firefox-addon communication firefox-addon-webextensions


    【解决方案1】:

    附加组件之间的通信是runtime.sendMessage()runtime.connect()runtime.onMessageruntime.onConnect 功能的正常部分。

    runtime.sendMessage()runtime.connect() 都有可选的第一个参数:

    extensionId

    对于runtime.sendMessage(),这是:

    string。要将消息发送到的扩展程序的 ID。包括此以将消息发送到不同的分机。如果预期接收者已使用 manifest.json 中的 applications 键显式设置 ID,则 extensionId 应具有该值。否则,它应该具有为预期收件人生成的 ID。

    如果省略extensionId,则消息将发送到您自己的扩展。

    对于runtime.connect(),这是:

    string。要连接的扩展程序的 ID。如果目标已使用 manifest.json 中的 applications 键显式设置 ID,则 extensionId 应该具有该值。否则,它应该具有为目标生成的 ID。

    runtime.onMessageruntime.onConnect 都提供sender 属性或参数,可以随消息一起提供,也可以作为端口的一部分提供。此参数/属性是一个runtime.MessageSender,其中包括一个id 属性,即:

    id

    • string。发送消息的扩展程序的 ID(如果消息是由扩展程序发送的)。如果发件人使用 manifest.json 中的 applications 键显式设置 ID,则 id 将具有此值。否则它将具有为发件人生成的 ID。

      请注意,在 Firefox 54 之前的版本中,此值是扩展程序的内部 ID(即出现在扩展程序 URL 中的 UUID)。

    【讨论】:

    • 谢谢,我完全忽略了这一点,转而选择更隐蔽的区域进行搜索。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2012-06-10
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多