Safari扩展:window.open(...)有时不起作用?

时间:2014-07-19 16:26:14

标签: safari safari-extension

我有一个注入的样式表,可以两次调用带有window...open()的弹出窗口。一个是用户单击HTML按钮,另一个是用户单击上下文菜单项时。要监听上下文菜单项,我需要在注入的脚本上添加一个监听器,如此

safari.self.addEventListener("message", messageCallBack, false); // Message comes from global.html when context menu item is clicked

以下回调

function messageCallBack(msgEvent) {
   ... 
   window.open(...)
   ...
}

由于某种原因,当按钮调用window.open时弹出窗口工作,但是当消息回调调用window.open时,弹出窗口不工作。我假设它可能与窗口对象有关。

1 个答案:

答案 0 :(得分:0)

我怀疑这是因为window.open限制用于对抗弹出式广告。这意味着它只能响应点击事件。

为了解决这个问题,我建议您使用safari.application API从全局页面打开新窗口:

safari.application.openBrowserWindow();
safari.application.activeBrowserWindow.activeTab.url = '...';

您还可以使用以下命令打开新标签页

safari.application.activeBrowserWindow.openTab('foreground').url = '...';

要实现此目的,您可能需要将注入的脚本中的消息发送到全局页面。