window.open 被拦截的处理方式

ajax提交中新标签页打开响应返回的url

  • 错误处理方式:

    ##触发按钮
    解冻
    
    ##绑定事件
    $("#jiedong").click(function (e) {
        $this = $(this);
        $this.text("处理中...");
        $.ajax({
            url: "xxxxxx",
            type: 'get',
            data: {},
            success: function(data){
                $this.text("解冻");
                if(data.status == 1) {
                    #新标签打开页面
                    window.open($this.attr("data-url");
                } else {
                  .....
                }
            },
            error: function () {
                alert("服务器异常");
            }
        });
    });
    
    
  • 原因分析及处理方案:

    • 原因:
      使用window.open打开url,浏览器会将该请求当成非用户操作。
      当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这不是一个用户希望看到的页面。
    • 处理方案:
      原a标签正常执行新开页面操作,只是生效时间放到执行click操作之后,即:a标签绑定data-remote=”true“属性,延迟执行超链接动作,当click返回true时才执行href的链接。
      注意:此时ajax提交要进行同步处理,不然超链接是不会等待ajax的请求处理完才执行了跳转操作。(默认是异步处理,所以需要设置async:true;)
  • 修正后处理方式:

    ##触发按钮
    解冻
      
    ## 绑定事件
    $("#jiedong").click(function (e) {
       $this = $(this);
       ## 设置标杆,便于ajax的处理结果向外渗透
       var flag = false;
       $this.text("处理中...");
       $.ajax({
            url: "xxxxxx",
            type: 'get',
            async: false,  ## 重要
            data: {},
            success: function(data){
                $this.text("解冻");
                if(data.status == 1) {
                      flag = true; ##向外渗透结果
                  } else {
                    .....
                  }
             },
             error: function () {
                  alert("服务器异常");
             }
          });
          
          ## 决定是否执行超链接动作
          return flag;
      });
    

你可能感兴趣的:(window.open 被拦截的处理方式)