有没有办法使用dispatchMethod()将消息从popover传递到全局页面,而不是使用safari.extension.globalPage.contentWindow调用全局页面的函数。
目前,我在网页中使用动态创建的iframe来模拟弹出窗口。这使用Safari的消息传递与全局页面通信。所以我想支持这个以及后来的Safari版本中的新popover。
在popover和全局页面之间传递消息将帮助我重用代码。
由于
答案 0 :(得分:0)
使用dispatchMessage看起来没有办法让popover将消息分派到全局页面,反之亦然。但是,您可以使用HTML5标准window.postMessage来执行等效操作,但是如果不进行某些修改,则无法重用现有代码。
要从popover中使用postMessage,您可以执行以下操作:
var gw = safari.extension.globalPage.contentWindow;
gw.postMessage("hello there", window.location.origin);
并在全球页面中接收它:
window.addEventListener('message', function (msg) {
if (msg.origin == window.location.origin) {
msg.source.postMessage("got your message", window.location.origin);
doSomethingWithMessageData(msg.data);
}
}, false);
此消息传递协议与特定于扩展的协议类似,您可以重用大部分现有代码,只需添加一个精简抽象层。