Safari扩展:window.open(…)不';我有时不工作?

Safari扩展:window.open(…)不';我有时不工作?,safari,safari-extension,Safari,Safari Extension,我有一个注入式样式表,它两次调用带有window…open()的弹出窗口。一个是当用户单击HTML按钮时,另一个是当用户单击上下文菜单项时。要侦听上下文菜单项,我需要在注入的脚本上添加一个侦听器,如下所示 safari.self.addEventListener("message", messageCallBack, false); // Message comes from global.html when context menu item is clicked 以及下面的回调 funct

我有一个注入式样式表,它两次调用带有
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时弹出窗口工作,但当消息callback调用window.open时弹出窗口不工作。我假设它可能与窗口对象有关。

我怀疑这是由于对
窗口的限制。打开
是为了对抗弹出式广告。这意味着它只能在响应单击事件时工作

为了解决这个问题,我建议您使用
safari.application
API:

safari.application.openBrowserWindow();
safari.application.activeBrowserWindow.activeTab.url = '...';
您还可以通过以下方式打开新选项卡:

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

要实现这一点,您可能需要将一条消息从注入的脚本发送到全局页面。

实际上就是这样!是否可以将新窗口的属性设置为:“scrollbars=no,menubar=no,height=540,width=600,resizeable=no,toolbar=no,status=n?”‌​o“不幸的是,我认为您不能以相同的方式设置属性。但是,您可以尝试在加载的页面上使用javascript设置它们(必要时注入)。例如
window.resizeTo(600400)