之前在开发项目的时候遇到了一个问题。 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)

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!