Ajax请求后的Chrome window.open就像弹出窗口一样
我遇到一种情况,当用户按下按钮时,我会执行ajax请求,然后使用ajax请求的结果生成要在新选项卡中打开的URL。但是,在chrome中,当我在ajax请求的成功处理程序中调用window.open时,它将在新窗口中像弹出窗口一样打开(并被popup-
blockers阻止)。我的猜测是,由于成功代码与chrome认为不是由点击触发的点击处理代码是异步的,即使它与点击有因果关系。有什么方法可以防止这种情况,而无需使ajax请求同步?
以下是一些最小的代码来演示此行为:
$('#myButton').click(function() { $.ajax({
type: 'POST',
url: '/echo/json/',
data: {'json': JSON.stringify({
url:'http://google.com'})},
success: function(data) {
window.open(data.url,'_blank');
}
});
});
http://jsfiddle.net/ESMUA/2/
需要澄清的一点是:我更担心它是在单独的窗口而不是选项卡中打开,而不是因为它被弹出窗口阻止程序阻止了。
回答:
尝试添加
window.open(url,'_blank');
编辑
好吧,我认为打开不是用户操作直接结果(即非异步)的页面时,您无法绕开弹出窗口阻止程序。
您可以尝试执行以下操作,它看起来像是弹出窗口阻止程序的用户操作:
var $a = $('<a>', { href: url,
target: '_blank'
});
$(document.body).append($a);
$a.click();
编辑2
看起来您最好保持事物同步。
只要新窗口是“相同来源”,您就可以使用JS进行操作。
$('#a').on('click', function(e){ e.preventDefault();
var wi = window.open('about:blank', '_blank');
setTimeout(function(){ // async
wi.location.href = 'http://google.com';
}, 500);
});
以上是 Ajax请求后的Chrome window.open就像弹出窗口一样 的全部内容, 来源链接: utcz.com/qa/402850.html