我通过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/
为什么呢?我怎么能避免这个?
答案 0 :(得分:1)
如果将ajax请求更改为同步,则可能正常。
$.ajax({
url: 'ajaxUrl',
type: 'POST',
async: false,
}).done(function (result) {
openWin();
});
正如评论中所解释的,如果打开选项卡/弹出窗口的命令来自可信任事件,浏览器将只打开没有弹出窗口阻止程序警告的选项卡/弹出窗口。