【问题标题】:How can I pass messages between two instances of *the same* Google Chrome extension?如何在*相同* Google Chrome 扩展的两个实例之间传递消息?
【发布时间】:2010-11-18 14:37:31
【问题描述】:

虽然 Google Chrome 的 messaging API 允许两个不同的扩展程序使用它们的“扩展程序 ID”进行通信,但我还没有看到 相同 扩展程序的两个实例之间的通信问题得到解决。这可以使用当前的 Google Chrome API 吗?是否有一个“实例 ID”来唯一标识我的扩展程序的每个实例?

如果没有,我想我会尝试使用我自己的服务器作为 -middle man- 并让我的扩展程序的所有实例使用我的 -middle man- 相互通信。在这种情况下,Chrome API 是否会为扩展公开 Instance ID?如果没有,关于提出我自己的实例 ID 方案的任何建议?

【问题讨论】:

  • 一个陷阱是,当文档提到可选参数时,您会忽略该参数(不要在其位置传递 undefined)。例如, chrome.extensions.connect(extensionId, connectInfo) 只是 chrome.extensions.connect(connectInfo) 连接到您自己的扩展。如果您仍然需要帮助,则需要正确使用术语。 “实例”是什么意思?您正在运行哪些页面(背景、视图、内容)?
  • 扩展实例只是多个副本。例如,如果安装了 Adblock 扩展,而也安装了 Adblock 扩展,那么这就是同一个 Adblock 扩展的 2 个实例。我的问题是我怎样才能让这两个 Adblock 实例相互通信,因为您的 Adblock 副本和我的 Adblock 副本具有相同的 ID gighmmpiobklfepjocnamgkkbiglidom 并且我使用该 ID 发送的任何消息都会到达我的 Adblock 实例,不是你的。
  • 我正在尝试一种基于用户登录的方法来让实例相互通信。这意味着,使用上面的示例,您将使用您的凭据登录 Adblock,我也会这样做;然后,两个 Adblock 实例都将使用这些唯一的凭据进行通信。我将不得不使用我自己的服务器来管理 conns,这对于手头的任务来说相当麻烦,所以我非常欢迎一种更好、更优雅的方法来完成工作。至于我使用的元素,目前仅限于视图和内容脚本,但我必须在发货时使用选项页面等。

标签: google-chrome messaging p2p


【解决方案1】:

你当然可以这样做,我为我的 Reload All Tabs 扩展做了同样的事情。 https://chrome.google.com/extensions/detail/bfenodnbilondijnaionekngdhadmegk

基本上,你需要一个“扩展 ID”,就像我所做的那样,我基本上将主扩展上传到画廊,这给了我唯一的 ID。

使用该 ID,您可以通过以下方式向该扩展程序发送请求: http://code.google.com/chrome/extensions/extension.html#method-sendRequest

并通过以下方式监听外部扩展请求: http://code.google.com/chrome/extensions/extension.html#event-onRequestExternal

您可以查看 Reload All Tabs 的源代码,了解它是如何完成的: https://github.com/mohamedmansour/reload-all-tabs-extension

【讨论】:

  • 恐怕我要找的东西有点不同。例如,假设我们俩都安装了“重新加载所有标签”扩展(顺便说一句非常方便的扩展),you 是否可以重新加载 my 的所有标签远程 Chrome,通过 youryour Chrome 上运行的 Reload All Tabs 副本?
  • 当前 API 无法进行“远程”扩展通信。你能做到的唯一方法是通过中间人。该中间层将接受命令并将其路由给其他用户。这种通信称为 Publish-Subscriber,您也可以进行一对一的通信。但是中间人应该路由所有消息。您也可以有一个 WebSocket 服务器,两个客户端都连接到该服务器。但是跨扩展通信仅在本地安装的扩展中使用,而不是外部安装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
相关资源
最近更新 更多