Google chrome 如何在两个*相同*Google Chrome扩展实例之间传递消息?

Google chrome 如何在两个*相同*Google Chrome扩展实例之间传递消息?,google-chrome,messaging,p2p,Google Chrome,Messaging,P2p,虽然Google Chrome允许使用“扩展ID”在两个不同的扩展之间进行通信,但我还没有看到同一扩展的两个实例之间的通信问题得到解决。使用当前的Google Chrome API,这可能吗?是否有一个“实例ID”来唯一标识扩展的每个实例 如果没有,我想我会尝试使用我自己的服务器作为中间人,并让我的扩展的所有实例使用我的中间人相互对话。在这种情况下,ChromeAPI是否公开了扩展的实例ID?如果没有,有什么关于我自己的实例ID方案的建议吗?你当然可以这样做,我已经为我的“重新加载所有选项卡”扩

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


如果没有,我想我会尝试使用我自己的服务器作为中间人,并让我的扩展的所有实例使用我的中间人相互对话。在这种情况下,ChromeAPI是否公开了扩展的实例ID?如果没有,有什么关于我自己的实例ID方案的建议吗?

你当然可以这样做,我已经为我的“重新加载所有选项卡”扩展做了同样的事情。

基本上,你需要一个“扩展ID”我做了什么,我基本上把主扩展上传到了画廊,这给了我唯一的ID

使用该ID,您可以通过以下方式向该分机发送请求:

并通过以下方式通过外部扩展请求进行侦听:

您可以查看重新加载所有选项卡的源代码,以了解如何完成此操作:

一个陷阱是,当文档提到可选参数时,您忽略了该参数(不要在其位置传递未定义的参数)。例如,chrome.extensions.connect(extensionId,connectInfo)就是chrome.extensions.connect(connectInfo),用于连接到您自己的扩展。如果您仍然需要帮助,您需要正确使用术语。“实例”是什么意思?您正在运行哪些页面(背景、视图、内容)?扩展的实例只是多个副本。例如,若您安装了Adblock扩展,而我也安装了Adblock扩展,那个么这就是同一个Adblock扩展的两个实例。我的问题是如何让这两个Adblock实例彼此对话,因为您和我的Adblock副本都具有相同的GighmPiobklfepJocnamgkBiglidom ID,并且我使用该ID发送的任何消息都将到达我的Adblock实例,而不是您的实例。我正在尝试一种基于用户登录的方法来让实例彼此对话。这意味着,使用上面的示例,您将使用您的凭据登录到Adblock&我将在我的末尾执行相同的操作;然后,两个Adblock实例都将使用这些唯一凭据进行通信。我将不得不使用自己的服务器来管理CONN,这对于手头的任务来说相当麻烦,因此我非常欢迎一种更好、更优雅的方法来完成这项工作。至于我使用的元素,到目前为止,它仅限于视图和内容脚本,但当我发货时,我将不得不使用选项页等。恐怕我要寻找的是有点不同。例如,假设我们两人都安装了“重新加载所有标签”扩展(顺便说一句,这是一个非常方便的扩展),那么您是否可以通过在您的Chrome上运行的“重新加载所有标签”的副本远程重新加载my Chrome的所有标签?使用当前API无法进行“远程”扩展通信。你唯一能做的就是通过中间人。中间层将接受命令并将其发送给其他用户。这种通信称为发布订户,您也可以进行一对一通信。但是中间人应该传递所有信息。您也可以有一个WebSocket服务器,两个客户端都可以连接到该服务器。但跨扩展通信仅在本地安装的扩展内使用,而不在外部使用。