【jquery】ajax 请求成功后新开窗口被拦截解决方法

 4226

问题:

前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢?


分析:

浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。


解决方法:

1、异步改为同步,即:async:false

2、将新开窗口指向为一个对象,然后修改对象的 url,比如:

  1. $('.task').bind('click',function(){
  2.     var w = window.open();
  3.     $.ajax({
  4.         type: 'POST',
  5.         url: '/yourURL',
  6.         dataType: 'json',
  7.         error: function(){
  8.             w.close();
  9.         },
  10.         success: function(res){
  11.             w.location = res.url;
  12.         }
  13.     });
  14. });

如果是get或者post方法的话,只需要改为同步即可,在全局设置:

  1. $.ajaxSetup({  
  2.     async : false  
  3. });

这样就不会被浏览器主动拦截了,亲测可用。

TAG标签:
本文网址:https://www.zztuku.com/detail-7639.html
站长图库 - 【jquery】ajax 请求成功后新开窗口被拦截解决方法
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐