有没有办法使用 dispatchMethod() 将消息从弹出窗口传递到全局页面,而不是使用 safari.extension.globalPage.contentWindow 调用全局页面的函数。
目前我在网页内使用动态创建的 iframe 来模拟弹出框。这使用 Safari 的消息传递与全局页面进行通信。所以我想在以后的 Safari 版本中支持这个以及新的弹出框。
弹出框和全局页面之间的消息传递将帮助我重用代码。
谢谢
有没有办法使用 dispatchMethod() 将消息从弹出窗口传递到全局页面,而不是使用 safari.extension.globalPage.contentWindow 调用全局页面的函数。
目前我在网页内使用动态创建的 iframe 来模拟弹出框。这使用 Safari 的消息传递与全局页面进行通信。所以我想在以后的 Safari 版本中支持这个以及新的弹出框。
弹出框和全局页面之间的消息传递将帮助我重用代码。
谢谢
似乎没有办法让弹出框使用 dispatchMessage 向全局页面发送消息,反之亦然。但是,您可以使用 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);
这个消息传递协议与特定于扩展的协议非常相似,您可能可以重用大部分现有代码,只需添加一个薄抽象层。