$ .ajax()中的window.open和弹出窗口阻止程序。完成()

时间:2015-03-31 12:50:12

标签: javascript jquery ajax popup

我通过jQuery调用了ajax;完成后,我需要在新标签页中打开一个URL。

我写了这个简单的函数:

var openWin = function() {
    window.open('/UrlToOpen', '_blank');
    win.focus();
}

如果我直接从JS代码调用此函数,它会打开而不会触发弹出窗口阻止程序。

如果我从$ .ajax()。done()调用它,就像这样:

$.ajax({
        url: 'ajaxUrl',
        type: 'POST'
    }).done(function (result) {
        openWin();
}); 

触发弹出窗口阻止程序。

此处示范:https://jsfiddle.net/dggwL5uj/

为什么呢?我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

如果将ajax请求更改为同步,则可能正常。

$.ajax({
        url: 'ajaxUrl',
        type: 'POST',
        async: false,
    }).done(function (result) {
        openWin();
}); 

正如评论中所解释的,如果打开选项卡/弹出窗口的命令来自可信任事件,浏览器将只打开没有弹出窗口阻止程序警告的选项卡/弹出窗口。