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的问题.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...