zoukankan      html  css  js  c++  java
  • Ajax 请求后打开新窗口被拦截的解决方案

       公司业务上有个场景,需请求后台获取支付链接地址,再打开地址引导用户购买。这样的场景在其他企业应该也很场景。但是遇到个很常见的问题,Ajax后直接用window.open(url),会被浏览器作为广告拦截。

       解决方案:

       方案一,在ajax请求前新开默认窗口:

           let win = window.open("", "_blank");

           let param = {

              url: ...

             data: {...}  

          }

         axios.post(param).then((results)=>{

             if (results.code =='sucess' ) {

                   _openWin(win, applyinfo)

             }

         });

         //具体的新开窗口方法     

    _openWin (applyinfo){

        let usAgent = navigator.userAgent.toLowerCase();
        let url = wabpInfo.appTransUrl;

        if(usAgent.indexOf('safari') > -1 && usAgent.indexOf("chrome") < 1) { //safari浏览器
             if(url && win ){
                 win.location = url;
             }
         }else {
              url && window.open(url);
         }
    }

    方案二,ajax使用同步方式(网上提供)。

          $.ajax({

             type: 'post',

             datatype: 'post',

             async: false ,   //使用同步请求

             url: .....

             data: ...

    })

    这个方法在项目中尝试时失败了,依然会被浏览器拦截,使用Promise形式也未成功。

     最后项目折中,推荐使用提前打开方案1,或引入用户操作流程由用户触发新开窗口操作。

    希望对大家有帮助。

    才疏学浅,希望对大家的学习有帮助,有错误之处麻烦指出。
  • 相关阅读:
    css样式的优先顺序
    销售基本礼仪(转)
    推神:如何让你的公众号变得性感起来?(转)
    为什么你有10年经验,但成不了专家?(转)
    一分钟区分一流公司、二流公司、三流公司(转)
    什么是销售(转)
    地暖销售(转)
    销售总监开会(转)
    销售观念+习惯(转)
    一流销售,二流销售,三流销售(转)
  • 原文地址:https://www.cnblogs.com/nokelong/p/7930121.html
Copyright © 2011-2022 走看看