javascript - 回调函数中不允许弹窗
本文介绍了javascript - 回调函数中不允许弹窗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在chrome中使用ajax请求后在回调函数中使用window.open("xxxxx")会被chrome提示有弹,就算设置asyn为false也同样不能解决。
已经尝试过:
1.在页面后写好表单后在回调函数通过id找到该标签进行click()同样被禁止
$.ajax({
url: ...
data: ...
type: "post",
dataType: "json",
cache: false,
async: true,
success: function(t) {
window.open("/.../..."); 不允许打开
}
}
解决方案
贴一个之前相关问题的答案
这种情况出现是由于window.open的执行时机,你的window.open是在ajax回调中执行,无论是同步还是一步,等待ajax返回结果需要一定的时间,当你得到结果再去执行window.open,chrome认为这是一种不友好的行为(非用户主动点击打开弹窗),所以会被屏蔽。
碰巧在之前的项目中也遇到过,试了各种方法,最后发现没有什么特别完美的方法可以绕开这个限制,使用了一个方法:用户点击时立马打开一个空白页,然后等ajax回来的结果,拿到链接地址,替换掉之前空白页的url。
$('#a').on('click', function(e){
e.preventDefault();
var wi = window.open('about:blank', '_blank');
setTimeout(function(){ // 异步,模拟ajax
wi.location.href = 'http://google.com';
}, 500);
});
如果网络正常能返回url地址倒不会造成太大的用户体验上的问题,就怕没法正常返回url,这个时候用户那块就出现了一个空白页,如果产品必须重新打开且能返回url的几率非常高,相对来说这个方案没那么糟糕,如果产品没法接受这种情况,那就老老实实刷新当前页吧。
这篇关于javascript - 回调函数中不允许弹窗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文