我正在将一个chrome / opera扩展移植到safari。它显示一个包含与页面相关的一些数据的弹出窗口。所以它需要与注入的脚本进行通信。我想出了如何在注入的脚本和后台页面以及弹出窗口和后台页面之间进行通信。但是没有触发popover的事件监听器,popover会向注入的脚本发送消息,并且不会收到返回消息。也许我把它设置为错误的窗口对象?或者Safari的popover实现中有一个错误? 谢谢。
这是代码。
在popover中:
safari.self.addEventListener("message", (function(theMessageEvent){
safari.extension.globalPage.contentWindow.console.log("popover message");
//this is the listener that is not called
}));
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("get");
//this works and sends message to injected script
在注入的脚本中:
safari.self.addEventListener("message", (function(theMessageEvent){
if(theMessageEvent.name=="get"){
theMessageEvent.target.tab.dispatchMessage("setpopover");
//this sends the message back, maybe the target.tab should be changed to something else?
} }
编辑: 我找到了一个解决方案:popover向注入的脚本发送消息,注入的脚本将回复发送到后台页面,后台页面使用safari.extension.popovers [0] .contentWindow.somefunction直接调用popover中脚本的函数。 );