一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Js中ajax window.open 被拦截问题解决办法

时间:2016-02-23 编辑:简简单单 来源:一聚教程网

form 表单测试还是被拦截


 
var w = window.open();
 
  $.ajax({
    async:false,
   url:baseUrl+'aaa'
   success:function(data){
     if(data!=null){
  //  window.open(baseUrl+path);  
   // return false;
   // $('#loginform').submit();
   // form.target="_blank";
    //form.action=baseUrl+path;
    //form.submit();
    w.location = baseUrl+path;
}
   
}
});
 

参考这个就行了。。

分析:

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

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

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

$('.task').bind('click',function(){
var w = window.open();
$.ajax({
type: 'POST',
url: '/surveyTask',
dataType: 'json',
error: function(){
w.close();
},
success: function(res){
w.location = res.url;
}
});
});

最后需要说明的是:网上的动态添加 form 新开窗口的方法,并不适合 ajax 请求,至少博主测试了下仍然被浏览器所拦截。

热门栏目