ajax请求window.open()被拦截

项目使用ajax post后根据返回的success,须要打开一个新页面,使用window.open发现谷歌浏览器直接被拦截。php

后来了解发现该操做并非用户主动触发的,因此它认为这是不安全的就拦截了,即便 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),html

浏览器也会认为不是由用户主动触发的,所以不能被安全执行,因此也会被拦截。废话很少说,直接上终极解决办法ajax

解决方法:json

    var newwin = window.open(); // 这句必须在ajax以前定义
    $.ajax({
        type: 'POST',
        url: '/do.php',
        dataType: 'json',
        error: function(){
              newwin.close();
        },
        success: function(data){
              newwin.location = data.url;
        }
    });

也没首页会打开一个空白页面随后跳转到返回的url上,期间时间间隔很短。若是异步请求执行快几乎没有啥影响。浏览器

经测谷歌/360浏览器正常。
网上不少人说改为同步syns。。其实没实际卵用,它必须响应时间极短才能见效,不信你们能够试试,可是上面的代码在微信上行不通安全

微信不支持window.open ,至少个人安卓微信上是没法经过window.open打开窗口的,可是能够经过self.location.href='new.html'打开。
总结:上面经过window.open开始就打开空白页,体验很差,对于ajax 页面跳转打开新窗口确实没啥好的办法,还要兼顾微信和手机浏览器的兼容性问题:
最终我直接改为页面跳转,解决微信和其余浏览器的兼容问题:目前各浏览器和微信上一切正常:微信

$(document).ready(function () {
    $.post("/do.php", {
            order_sn: "111111"
            },
            function (data) {
                var data = eval("(" + data + ")");
                if(data.tatus==1)
            self.location.href = "";// 跳转到新页
            });
});
相关文章
相关标签/搜索