微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax请求响应中window.open拦截解决

问题原因:

ajax回调函数中执行window.open或者模拟click事件,由于跳转操作不是用户主动触发,会被认为不安全,浏览器会进行拦截
1: 在fun方法调用window.open是不会被拦截的。
2:如果不是打开新窗口,而是改原来的网页地址,可以使用window.location = newurl 来实现,这样不会被拦截

具体解决

function fun(){
     var tmpWin  = window.open()
      ajax(xxx,handle(){ 
            //回调函数
            var  newurl  = xxxx
            tmpWin.location.href = newurl;
       })
}

上面方法,存在一个问题时,因为先打开了空白窗口,如果ajax请求失败(网络或业务逻辑问题)后, 新窗口中就不会有正常的结果体现,有可能造成用户疑惑。
一个解决办法是,当ajax出现问题时,可以考虑给出一个提示,如 tmpWin.document.write(“服务器处理异常”);

甚至为了防止ajax响应时间过长,当窗口新建后,立即给出提示 tmpWin.document.write(“服务器正在处理中,请稍后”);

后面如果ajax正常返回,则因为设置了location值,原来打印的信息会被新的页面信息覆盖。

其他:ajax改为同步执行,用户等待时间较长,体验不好。而且服务器不能很快返回结果时仍会被拦截

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐