从主线程调用的window.open()默认打开新选项卡.
但是,这里每次打开新窗口(Opera 16和Google Chrome 29)
<input type="button" value="Open" onclick="cb1()"> <script type="text/javascript"> function cb1() { setTimeout(wo,1000); //simple async } function wo() { var a = window.open("http://google.com","w2"); a.focus(); } </script>
(哈哈,这是Open a URL in a new tab (and not a new window) using JavaScript的答案).
如何在标签页中打开(按浏览器默认)?
解决方法
我们遇到了同样的问题,并在SO周围寻找答案.我们发现在我们的情况下工作,蒸馏智慧如下:
该问题与浏览器弹出窗口阻止程序有关,阻止编程窗口打开.浏览器允许从主线程上发生的实际用户点击打开窗口.同样,如果你在主线程上调用window.open,它将工作,如上所述.根据Open a URL in a new tab (and not a new window) using JavaScript的这个答案,如果您使用Ajax调用,并希望成功打开窗口,则需要设置async:false,因为这将保持主线程上的所有内容.
我们无法控制我们的Ajax调用,但发现另一种解决方案由于相同的原因而起作用.警告,这是有点黑客,可能不适合你给你的约束.在Open a URL in a new tab (and not a new window) using JavaScript的不同答案的评论中,您可以在调用setTimeout之前打开窗口,然后在延迟功能中更新它.有几种方法来做到这一点.在打开窗口时,请保持对窗口的引用,w = window.open …并设置w.location或打开目标,window.open(”,’target_name’)在延迟功能中打开target,window.open(‘your-url’,’target_name’),并依赖浏览器保留引用.