是否有一种方法可以使用dispatchMethod()将消息从弹出窗口传递到全局页面,而不是使用safari.extension.globalPage.contentWindow.
目前我使用一个动态创建的iframe在网页内模拟弹出窗口。它使用Safari的消息传递与全局页面通信。所以我想在以后的Safari版本中支持这个以及新的弹出窗口。
在弹出窗口和全局页面之间传递消息将帮助我重用代码。
谢谢
看起来没有办法让弹出窗口发送消息到全局页面,反之亦然,使用dispatchMessage。但是,您可以使用HTML5标准窗口。postMessage来做相同的事情,但是如果不做一些修改,就不能重用现有的代码。
要从弹出窗口使用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);
此消息传递协议与特定于扩展的协议非常相似,因此您可能可以重用大多数现有代码,只需添加一个薄抽象层。