微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript window.open从回调

从主线程调用的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’),并依赖浏览器保留引用.

当然,如果用户的设置在新窗口中打开链接,这不会改变,但这不是OP的问题.

原文地址:https://www.jb51.cc/js/153951.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐