0

Safari 扩展框架明确不支持扩展之间的消息传递。我正在寻找一种可行的方法来解决这个问题,而不让页面知道扩展正在运行。

建议(未测试):

  1. 一个扩展使用 openTab()打开一个隐藏选项卡到 about:blank#extension-channel。另一个通过 URL 搜索该选项卡并找到它。他们生产和使用该页面上的元素进行交流。

  2. 如果扩展可以跨域读取 cookie,则一个在 extension-homepage.com设置一个具有随机 ID 的 cookie,另一个读取它。然后他们创建名为extension-message-[the random ID]" 的 DOM 事件,因此页面无法侦听。

  3. 请愿 Safari 开发人员将 onRequestExternal 添加到他们的 API 中;)

你能想到另一种方法吗?你有没有得到上述任何工作?

4

2 回答 2

0

让扩展 A 打开一个WebSocket连接到由扩展 B 用 Ja​​vaScript 实现的 WebSocket 服务器。参见socket.ioWebSocket-Node等。允许两个扩展之间或扩展与外部世界之间的强大双向通信。

于 2012-05-09T15:44:05.917 回答
0

可以使用window.postMessage在扩展之间传递消息,以当前选项卡中的页面作为中介。

我在https://github.com/canisbos/ClickClack分享了两个非常简单的演示扩展作为概念证明。如果您安装它们,您会看到单击一个扩展程序的工具栏按钮会导致另一个按钮图像翻转。

于 2012-04-18T00:38:57.640 回答