2

有没有办法使用 dispatchMethod() 将消息从弹出窗口传递到全局页面,而不是使用 safari.extension.globalPage.contentWindow 调用全局页面的函数。

目前我在网页内使用动态创建的 iframe 来模拟弹出框。这使用 Safari 的消息传递与全局页面进行通信。所以我想在以后的 Safari 版本中支持这个以及新的弹出框。

弹出框和全局页面之间的消息传递将帮助我重用代码。

谢谢

4

1 回答 1

0

似乎没有办法让弹出框使用 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);

这个消息传递协议与特定于扩展的协议非常相似,您可能可以重用大部分现有代码,只需添加一个薄抽象层。

于 2013-03-14T03:18:26.787 回答