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

回到顶部