两个Safari扩展如何相互通信?

时间:2012-04-17 21:05:49

标签: api safari-extension

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

建议(未经测试):

  1. 一个分机打开隐藏标签到about:blank#extension-channel with openTab()。另一个按URL搜索该选项卡并找到它。他们在该页面上制作和使用元素进行交流。

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

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

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

2 个答案:

答案 0 :(得分:0)

可以使用window.postMessage在扩展程序之间传递邮件,并将当前标签页作为中间人。

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

答案 1 :(得分:0)

让扩展A通过扩展B打开与Javascript实现的WebSocket服务器的WebSocket连接。请参阅socket.ioWebSocket-Node等。允许在两个扩展之间进行强大的双向通信,或者在扩展与外部世界之间。