消息在safari扩展中的popover和全局页面之间传递,而不使用globalPage.contentwindow

时间:2013-03-11 20:09:40

标签: safari-extension

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

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

在popover和全局页面之间传递消息将帮助我重用代码。

由于

1 个答案:

答案 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);

此消息传递协议与特定于扩展的协议类似,您可以重用大部分现有代码,只需添加一个精简抽象层。