window.open放在ajax校验完成并且成功后才会调用,这时浏览器会觉得这个弹窗不是用户操作想看到的,
所以自动进行了拦截!
解决方法
// 提前打开一个空的窗口
var newTab=window.open('about:blank');
$.ajax({
type: "post",
url: "/xxxx/xxxx",
data: {"param": param},
error: function (data) {
showError(data);
},
success: function (data) {
if (data.errorFlag == 0) {
// 给新打开的窗口赋值
newTab.location.href = "www.baidu.com";
} else {
alert('提示信息');
}
}
});
出现被拦截情况的原因主要在于,浏览器不允许,非用户行为的窗口打开方式,所以必须通过点击事件来触发URL打开,所以采取了下面的解决办法:
函数封装:先创建个跳转的a元素,模拟发送click请求后将该元素从文档中删除;
$.ajax({
type: "post",
url: "/xxxx/xxxx",
data: {"param": param},
error: function (data) {
showError(data);
},
success: function (data) {
if (data.errorFlag == 0) {
openWin('http://www.baidu.com');
} else {
alert('提示信息');
}
}
});
function openWin(url) {
$('body').append($('<a href="'+url+'" target="_blank" id="openWin"></a>'))
document.getElementById("openWin").click();//点击事件
$('#openWin').remove();
}