之前在开发项目的时候遇到了一个问题。 ajax异步请求成功后,需要打开一个新窗口打开url。 使用了window.open()方法,可惜被浏览器屏蔽了。 如何解决这个问题呢?
浏览器之所以拦截新打开的窗口,是因为该操作不是用户触发的,所以认为不安全而拦截(但如果是_self,就没有这个限制了),即使ajax回调 function 模拟点击或提交(trigger(‘click’))等用户行为的执行,浏览器也会认为不是用户主动触发的,所以不能安全执行导致被拦截。 解决方法:
1.将异步改为同步,即:async:false
2、将新打开的窗口指向一个对象,然后修改该对象的url,例如:
$('.task').bind('click',function(){ var w = window.open(); $.ajax({ type: 'POST', url: '/yourURL', dataType: 'json', error: function(){ w.close(); }, success: function(res){ w.location = res.url; } }); }); 如果是get或者post方法的话,只需要改为同步即可,在全局设置:
$.ajaxSetup({
async : false
});
这样就不会被浏览器主动拦截了,亲测可用。(马哥源码 tang)