原因:当浏览器检测到非用户操作产生的新标签页,则会对其进行阻止。因为浏览器认为这可能是一个广告,存在安全隐患,不是一个用户希望看到的页面。
解决方案:
- 非ajax回调函数,可以通过模拟用户点击操作的行为打开新标签页。新创建一个a标签,添加href属性,调用click(),然后移除a标签。
function openWin(url, id) {
let a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('target', '_blank');
a.setAttribute('id', id);
if(!document.getElementById(id)) {
document.body.appendChild(a);
}
a.click();
}
- ajax回调函数中方案1仍不适用,浏览器仍会拦截,可以采用先打开空页面,然后在回调函数中重定向。
let win = window.open();
ajax().always((success) => {
if (!success) {
win.close();
return;
}
win.location.href = url;
});