zoukankan      html  css  js  c++  java
  • 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浏览器正常。
    网上很多人说改成同步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 = "";// 跳转到新页
                });
    });
  • 相关阅读:
    Java标签实现分页
    Servlet过滤器介绍之原理分析
    java超强分页标签演示
    Mybatis中resultMap与resultType区别
    洛谷 P1002 过河卒
    洛谷 P2181 对角线
    ACM常数优化
    2020 年百度之星·程序设计大赛
    AtCoder Beginner Contest 171 E
    AtCoder Beginner Contest 171 D
  • 原文地址:https://www.cnblogs.com/phpper/p/10660395.html
Copyright © 2011-2022 走看看