最近开发过程中 需要进行接口认证 才能打开新窗口的需求 代码如下
?????????// getMatchBase(.....).then( ?????????// ??result => { ??????????// ?????win.open(‘/matchDetail.html?id=‘ + matchId); ?????????// ??}, ?????????// ??error => { ?????????// ????....... ?????????// ?????win.close(); ?????????// ??} ?????????// )
浏览器只有在认为click和submit在打开新窗口时(如果是_self则不会有此限制),这些操作是由用户主动触发时才是安全可以被执行,而ajax回调函数中去执行click和submit被浏览器认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。
但是 由于异步操作的原因,浏览器会因为安全因素拦截,造成用户体验不好,目前为止我找到的靠谱的解决方法如下
将ajax请求设置为同步,
?????????$.ajax({ ???????????url: , ???????????data:{ ?}, ?????????? async:false, ???????????complete: function(data){ ?????????????if(data.readyState == 4 && data.status == 200) { ????????????????window.open(‘/matchDetail.html?id=‘ + matchId); ?????????????} else { ??????????????????????????????} ???????????} ?????????});
供大家参考。
js 异步操作打开新页面被浏览器拦截的问题
原文地址:https://www.cnblogs.com/lisiyang/p/8432571.html