从主线程调用的
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 的回答)。
如何在此处的选项卡中打开(浏览器默认)?
最佳答案
我们遇到了同样的问题并四处寻找答案。我们的发现适用于我们的环境,提炼出来的智慧如下:
该问题与阻止程序窗口打开的浏览器弹出窗口阻止程序有关。浏览器允许窗口从发生在主线程上的实际用户点击打开。同样,如果您在主线程上调用 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')
,在该目标中打开的延迟函数中,window.open('your-url', 'target_name')
,并依赖于浏览器保留引用。
当然,如果用户将他们的设置设置为在新窗口中打开链接,这不会改变这一点,但这对 OP 来说不是问题。
关于javascript window.open 从回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026162/