ajax请求window.open()被拦截

Posted 周伯通的麦田

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax请求window.open()被拦截相关的知识,希望对你有一定的参考价值。

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

后来了解发现该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger(‘click‘)),

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

解决方法:

    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浏览器正常。

 

以上是关于ajax请求window.open()被拦截的主要内容,如果未能解决你的问题,请参考以下文章

ajax 请求成功之后window.open()被浏览器拦截弹窗的处理方法

js实现window.open不被拦截的解决方法汇总

js实现window.open不被拦截的解决方法汇总

ajax回调中window.open弹窗被Chrome81拦截的解决方法

关于window.open()被拦截

window.open方法被浏览器拦截的处理方式