最近做一个购物项目,未登录时候跳转到登录界面登录,采用了window.open,最近才发现很几种浏览器都拦截了,需要点击放行才可以,我了个去,这对于有洁癖的码农来说是绝对不的。
被拦截的原因,百度了一下:在浏览器没有任何鼠标操作的时候,window.open会被当成广告被拦截,也就是你需要通过鼠标这类点击同步触发才可以,所以ajax这种异步回调时候打开窗口也会被拦截,解决办法,鼠标点击时候先打开窗口,回调时候再改变打开窗口的location即可,上代码:
var newOpenWindow; //先定义个全局新窗口
$.ajax({
type: "post",
url: "/api/xxx/",
data: {
........
},
success: function (responseData) {
var state = responseData.State;
var msg = responseData.Msg;
if (state == 1) {
//添加成功
openMyShoppingCart(newOpenWindow);
return;
}
else {
if (msg == "notLogin") {
openLoginWin(newOpenWindow)
}
else
{
newWindow.close();
alert(msg);
}
}
}
}
);
});
大家自己看代码,希望对大家有帮助。