我有一个注入的样式表,可以两次调用带有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时,弹出窗口不工作。我假设它可能与窗口对象有关。
答案 0 :(得分:0)
我怀疑这是因为window.open
限制用于对抗弹出式广告。这意味着它只能响应点击事件。
为了解决这个问题,我建议您使用safari.application
API从全局页面打开新窗口:
safari.application.openBrowserWindow();
safari.application.activeBrowserWindow.activeTab.url = '...';
您还可以使用以下命令打开新标签页
safari.application.activeBrowserWindow.openTab('foreground').url = '...';
要实现此目的,您可能需要将注入的脚本中的消息发送到全局页面。