在safari扩展中不使用globalPage.contentwindow的弹出窗口和全局页面之间传递消息



是否有一种方法可以使用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);

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

最新更新