资讯专栏INFORMATION COLUMN

ajax请求里面调用window.open会被浏览器拦截(优化版)

Lin_YT / 3072人阅读

摘要:众所周知,请求里面调用会被浏览器拦截方法有两种解决办法,但是经测验例如改为同步请求还会出现一些问题比如站点外网址被拦截第一种解决办法优化该方法优点描述比如回调函数失败,浏览器默认打开的空链接会自动关闭,用户体验比较好。

众所周知,ajax请求里面调用window.open会被浏览器拦截方法有两种解决办法,但是经测验例如ajax改为async:false同步请求还会出现一些问题(比如站点外网址被拦截);

第一种解决办法优化:

该方法优点描述:比如ajax回调函数失败,浏览器默认打开的空链接会自动关闭,用户体验比较好。

 var newwin;
    $("#btn").click(function(){
        newwim = window.open();
        //此处调用ajax,异步即可:
        $.ajax({
            type:"POST",
            url: ajaxurl,       
            dataType : "json",
            data:parameter,  
            beforeSend : function(){},
            success:function(data) {
                if(data.TSR_CODE == "0"){                
                       newwin.location.href = xxx;//xxx为后端返回的地址;            
                }else{
                    alert(data.TSR_MSG);
                    newwin.close();//此处为ajax失败方法,自动关闭刚才会打开的页面;
                }
            },
            error:function(){
                console.log("访问出错,请重试!");
            },
            complete:function(){}
        });
    });

第二种解决办法分析:

此方法测试过:比如后台返回的是站外网址,谷歌浏览器、360浏览器等等会拦截请求,火狐、qq浏览器不会拦截,预测是浏览器自身对站外网址这种类型做了拦截,普通的网址不被拦截;

 $("#btn").click(function(){
        //此处调用ajax,异步即可:
        $.ajax({
            type:"POST",
            url: ajaxurl,       
            dataType : "json",
            async:false,//改为同步请求
            data:parameter,  
            beforeSend : function(){},
            success:function(data) {
                if(data.TSR_CODE == "0"){                
                     window.open(xxx);               
                }else{
                    alert(data.TSR_MSG);                    
                }
            },
            error:function(){
                console.log("访问出错,请重试!");
            },
            complete:function(){}
        });
    

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95188.html

相关文章

  • window.open 打开新窗口被拦截的解决方案

    摘要:使用包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。我们会遇到想要弹出一个窗口,可是却是在事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免先用打开一个窗口,然后修改地址。 最近公司开发的一个项目,平凡用到下载各种类型的文件,但是例如.txt,.jpg,.pdf格式的文件呢浏览器会在当前窗口直接打开,影响用户体验,尝试各种方案和百...

    JeOam 评论0 收藏0
  • window.open 打开新窗口被拦截的解决方案

    摘要:使用包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。我们会遇到想要弹出一个窗口,可是却是在事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免先用打开一个窗口,然后修改地址。 最近公司开发的一个项目,平凡用到下载各种类型的文件,但是例如.txt,.jpg,.pdf格式的文件呢浏览器会在当前窗口直接打开,影响用户体验,尝试各种方案和百...

    Ajian 评论0 收藏0
  • window.open 打开新窗口被拦截的解决方案

    摘要:使用包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。我们会遇到想要弹出一个窗口,可是却是在事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免先用打开一个窗口,然后修改地址。 最近公司开发的一个项目,平凡用到下载各种类型的文件,但是例如.txt,.jpg,.pdf格式的文件呢浏览器会在当前窗口直接打开,影响用户体验,尝试各种方案和百...

    Object 评论0 收藏0
  • 使用window.open打开新窗口被览器拦截的解决方案

    摘要:问题描述代码中直接使用会被浏览器窗口拦截原因浏览器为了维护用户安全和体验,在中直接使用,来打开新的链接是会被拦截的。 问题描述: 代码中直接使用window.open(//www.baidu.com, _blank);会被浏览器窗口拦截 原因浏览器为了维护用户安全和体验,在JS中直接使用window.open(url,_blank)来打开新的链接是会被拦截的。通常项目需要在ajax异步...

    jemygraw 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<