0

我意识到您无法控制浏览器是否打开新窗口与新选项卡,因此这可能没有解决方案。

问题基本上是我运行类似:

function runCommand() {
   //...
   window.open(url);
}

如果用户按下特殊键或单击,这会不时运行。一切正常,它将根据用户的浏览器设置打开一个新窗口或选项卡。伟大的。

问题是,我还有一些代码:

if (x.property) runCommand();

这将始终在新窗口中打开 url ,即使您runCommand在同一页面上的其他时间使用,如果这是用户的设置,它将使用选项卡。

起初,我认为这可能与页面未完全加载有关,因此我都尝试将其包装起来document.ready并使用setTimeout()了一些较高的数字(例如 5 秒)。即使在这样做之后,即使稍后runCommand()会打开一个新选项卡,它仍然会在初始运行时打开一个新窗口。有没有人经历过这种行为或知道如何解决它?

编辑:我创建了一个展示问题的小提琴。请原谅弹出窗口:http: //jsfiddle.net/csPGU/

4

2 回答 2

1

如果window.open从事件处理程序中执行,例如单击,它将在新选项卡中打开,否则将在新窗口中打开。

于 2012-04-17T05:59:38.857 回答
1

我猜这与浏览器本身以及浏览器尝试处理以编程方式打开的窗口的方式有关。

我假设当你runCommand稍后它是基于一个已经发生的事件(例如点击某物)。浏览器通常允许由事件触发的新窗口,但阻止那些没有交互的窗口(通常是弹出窗口)。

于 2012-04-17T06:02:17.660 回答