Safari扩展框架明确不支持扩展之间的消息传递。我正在寻找一个可行的黑客来解决这个问题,不让页面知道扩展正在运行。
建议(未经测试):
一个分机打开隐藏标签到about:blank#extension-channel with openTab()。另一个按URL搜索该选项卡并找到它。他们在该页面上制作和使用元素进行交流。
如果扩展程序可以跨域读取Cookie,则会在extension-homepage.com上设置一个随机ID 的Cookie,另一个读取它。然后他们创建名为extension-message-[the random ID]
“的DOM事件,因此页面无法收听。
请求Safari开发人员将onRequestExternal添加到他们的API中;)
你能想到另一种方法吗?你有没有上述任何工作?
答案 0 :(得分:0)
可以使用window.postMessage在扩展程序之间传递邮件,并将当前标签页作为中间人。
我在https://github.com/canisbos/ClickClack分享了两个非常简单的演示扩展作为概念验证。如果你安装它们,你会看到点击一个扩展名的工具栏按钮会导致另一个按钮图像翻转。
答案 1 :(得分:0)
让扩展A通过扩展B打开与Javascript实现的WebSocket服务器的WebSocket连接。请参阅socket.io,WebSocket-Node等。允许在两个扩展之间进行强大的双向通信,或者在扩展与外部世界之间。