我有一个需要与其全局页面通信的 Safari 扩展弹出框。从我正在使用的内容脚本
safari.self.tab.dispatchMessage(name,data);
来实现这一点。从弹出窗口中我没有找到办法做到这一点。我知道我可以直接访问全局页面中的方法
safari.extension.globalPage.contentWindow
但我的目标是重用已经在内容脚本中使用的代码片段。我对插件的chrome版本做同样的事情。
是否有模拟的聪明代理的代码
safari.self.tab.dispatchMessage(name,data);
从弹出窗口?
最佳答案
老实说,在弹出窗口和注入(inject)脚本中使用不同的代码可能更容易。如果你真的想要,你可以这样做:
function dispatchMessage(name, message) {
if (safari.self.tab) {
safari.self.tab.dispatchMessage(name, message);
} else if (safari.extension.globalPage.contentWindow) {
safari.extension.globalPage.contentWindow.handleMessage({name: name, message: message});
}
}
然后只需使用
dispatchMessage('foo', 'bar')
在您的弹出窗口和注入(inject)脚本中。虽然有点 hacky,因为 message 事件对象通常比 name
包含更多的信息。和 message
,并且您必须确保您的 handleMessage
函数实际上与分配给 message
的函数相同。全局页面中的事件监听器。
关于safari-extension - 将消息从 safari 扩展弹出窗口发送到全局页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529128/