最近做一个购物项目,未登录时候跳转到登录界面登录,采用了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); | |
} | |
} | |
} | |
} | |
); | |
}); | |
大家自己看代码,希望对大家有帮助。