问题描述:

1、在JS中直接使用window.open(url,"_blank")来打开新窗口是会被拦截的。PS:window.open(url,”_self”)改变当前的窗口可以生效。

2、在ajax异步请求完成后使用window.open来打开新窗口也会出现被拦截现象。

原因分析:

浏览器为了维护用户安全和体验,对于非用户操作产生的新弹出窗口会对其进行阻止,因为浏览器认为这不是一个用户希望看到的页面。

各浏览器对拦截时机的判断不一致。

对于放在ajax完成后的代码,浏览器会认为是网站自主弹出的窗口,有“流氓”的嫌疑。各浏览器的拦截反应也有所不同。

解决方案:

方案一、

创建一个a标签,利用a标签跳转,能解决大多数浏览器兼容问题,但是这种方法写在ajax异步请求完成后调用无效

function openWin(url) {var a = document.createElement("a"); //创建a标签a.setAttribute("href", url);a.setAttribute("target", "_blank");document.body.appendChild(a);a.click(); //执行当前对象
}
openWin("./page/......");

方案二、

模拟form表单提交,能解决大多数浏览器兼容问题,但是这种方法写在ajax异步请求完成后调用无效。

var form = document.createElement('form');
form.action = '"./page/a.html?id=1';
form.target = '_blank';
form.method = 'POST';
document.body.appendChild(form);
form.submit();

方案三、

在ajax调用之前先打开窗口,然后再设置新窗口的url来达到跳转的效果,但是该方法如果ajax响应太慢,则会出现一个空白窗口,影响用户体验,所以建议给该新窗口增加提示“正在拼命加载中”,但是我觉得这个并不是最好的解决方案。

//先在ajax函数之前打开新窗口,后再加载url
$('#btn').click(function () {//打开一个不被拦截的新窗口var win = window.open();win.document.body.innerHTML="正在拼命加载中......";$.ajax({url: 'a.com',success: function (url) {//修改新窗口的urlwin.location.href = url;}});
});

方案四、

把ajax异步改成同步,该方法会阻塞浏览器运行导致卡顿,经过测试,就算改成同步,chrome还是会阻拦,Firefox不会阻拦

//先在ajax同步函数之后打开新窗口
$('#btn').click(function () {$.ajax({url: 'a.com',async: false,  // 同步,意味着执行该ajax完成后,后续代码才继续运行success: function (url) {}});//执行完ajax后再打开新窗口window.open("./page/......", "_blank");
});

方案五、

把ajax执行完后,弹出一个弹出框提示用户,由用户确认点击打开,这个方法目前感觉是最友好的

$('#btn').click(function () {$.ajax({url: 'a.com',success: function (url) {option.open({//type: 1,icon: 3,title: "支付",btn: ['立即查看', '取消'],content: "文件已经校验成功,请查看结果",btn1: function (index) {option.closeAll();window.open("./page/......");},btn2: function (index) {option.closeAll();}});}});
});

ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题相关推荐

  1. ajax浏览器操作发生异常,解决IE浏览器缓存导致AJAX请求数据异常

    IE10浏览器会把AJAX请求的数据都缓存下来,然后每次想去刷新数据时发现数据都是一样的,于是导致数据显示异常. 解决方法: 在页面 标签里,加上以下声明: 保存后,刷新页面,重新访问即可. 说明:最 ...

  2. 什么叫同时处理两个ajax请求?

    什么叫同时处理两个ajax请求? 为什么要这样做呢?怎样处理两个ajax请求? 因为自己的语言能力有限,没把意思表达清楚,这里我就直接把题目贴出来了 同时发送2个ajax请求, 要求在2个请求都到达的 ...

  3. IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新

    IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新 IE针对Ajax请求结果的缓存/ IE浏览器同一个请求第二次是缓存 一.在AJAX请求的属性上直接设置cache functi ...

  4. ppst——技术视频 jquery ajax 请求 同步异步的执行的设置

    ppst 技术视频--技术视频 jquery ajax 请求 同步异步的执行的设置:请访问ppst 技术视频分享平台 , www.ppst.cc,上面有最新的技术视频,推荐大家把博客录制成视频吧,可以 ...

  5. html实现读取读卡器,如何在web浏览器页面使用IC卡读卡器并且兼容所有浏览器

    随着H5技术的不断发展与推广,H5技术被广泛用于移动设备,PC终端等众多领域.同时,越来越多的应用都基于B/S(浏览器/服务器)模式,降低开发难度的同时还能更好的普及和应用,突破了硬件设备的兼容性问题 ...

  6. 纯 js 让浏览器不缓存 ajax 请求

    开发「bufpay.com 个人即时到账收款平台」支付页面需要用到 ajax 轮询订单的支付状态. 现在浏览器对 ajax 的缓存策略遵循 http response header 里面的缓存设置,为 ...

  7. 浏览器如何发送ajax请求,浏览器关闭时,发送ajax请求

    浏览器关闭时,发送ajax请求 发布于:2018.11.12 - 13:10 当用户在浏览器关闭时,向服务器后台发送ajax请求.代码如下. 测试结果:Safari浏览器不支持,其余浏览器支持. if ...

  8. 【jquery】ajax 请求成功后新开窗口被拦截解决方法

    问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以 ...

  9. ajax跨浏览器初始化,使用Ajax的jQuery localStorage的跨浏览器

    我已经这样做了阿贾克斯jQuery的功能,节省了在localStorage的滚动位置和正常工作的Chrome,但它并没有在其他Web浏览器上工作,我能做些什么,使工作在所有平台上?使用Ajax的jQu ...

最新文章

  1. office技巧——编号与文字之间的空白大小调整
  2. 怎样将英文html文件转换成中文乱码,解决html导出pdf中文乱码问题的正确姿势
  3. boost::throw_exception的测试程序
  4. Spring Hello World
  5. 组合模式的安全模式与透明模式
  6. Jsp中使用数据库连接池
  7. Octavia API接口慢问题排查引发的思考
  8. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
  9. [System Design] 系统设计 (2) -- 数据库设计
  10. linux eclipse svn插件安装,Ubuntu16.04 Eclipse 安装 SVN 插件 subclipse 时 JavaHL 报错解决...
  11. ctfshow 网络迷踪-初窥门径
  12. Hive on spark执行子查询报错code3
  13. [计算几何]Last Stardust
  14. 公众号文章中怎样添加音乐、音频
  15. Fiddler教程系列—介绍【必看】
  16. 用python3+ PyQt5写一个NFC模块的串口小工具的一星期
  17. Nginx_PHP的LOG设计
  18. 用Python实现火爆全网的「蚂蚁呀嘿」!这也太恶搞了吧!
  19. 苍穹战线PC版教程,TC Games教你如何畅玩苍穹战线二次元卡牌游戏
  20. selenium firefox 提取qq空间相册链接

热门文章

  1. Linux程序开机启动
  2. JAVA学习篇--JSP实现原理
  3. Matlab并行编程函数cellfun arrayfun
  4. mapreduce编程实例(4)-求中位数和标准差
  5. 基于面板数据的熵值法
  6. TensorFlow Lite+Android,Google要搞的大事情
  7. 新思路设计可视化大型微服务监控系统
  8. Introduction to the Service Provider Interfaces--官方文档
  9. Java 下实现锁无关数据结构--转载
  10. Python基础知识(第五天)