ajax回调时浏览器拦截window.open()
2017-02-10 11:25
417 查看
现象:如下代码在window.open() 时会被浏览器拦截。
经测试,在直接open时,chrome51、firefox51、IE11 均不会拦截;
在有ajax请求回调后,这三个浏览器均会拦截。
如下分别是chrome、firefox、IE浏览器的拦截现象:
解决方案:
方案1. 将异步请求改为同步请求。
经测试,此方式在Firefox51中,会先出现about:blank,再到待跳转页面。
方案2. 先打开一个窗口(about:blank),再重定向。
建议:打开第一个空地址时可以绘制一个loading提示,以提高用户体验度。
打开现象如下:
注:
Safari 5.1.7 只根据其设置来判断是否拦截,不论是否在回调函数中打开新窗口。
理解:
浏览器拦截新打开的窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger(‘click’)),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。
参考:
http://www.cnblogs.com/chris-oil/p/4205517.html
经测试,在直接open时,chrome51、firefox51、IE11 均不会拦截;
在有ajax请求回调后,这三个浏览器均会拦截。
$.ajax({ type: "POST", url: REQUEST_BASE_PATH + "/**", data: { "productCode":systemCode }, dataType: "json", success: function (data) { window.open('https://www.baidu.com',"_blank"); }, error: function (data) { } });
如下分别是chrome、firefox、IE浏览器的拦截现象:
解决方案:
方案1. 将异步请求改为同步请求。
async:false,
经测试,此方式在Firefox51中,会先出现about:blank,再到待跳转页面。
方案2. 先打开一个窗口(about:blank),再重定向。
建议:打开第一个空地址时可以绘制一个loading提示,以提高用户体验度。
打开现象如下:
var win = window.open(); $.ajax({ type: "POST", // async:false, url: REQUEST_BASE_PATH + "/**", data: { "productCode":systemCode }, dataType: "json", success: function (data) { win.location = 'https://www.baidu.com'; }, error: function (data) { win.close(); } });
注:
Safari 5.1.7 只根据其设置来判断是否拦截,不论是否在回调函数中打开新窗口。
理解:
浏览器拦截新打开的窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger(‘click’)),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。
参考:
http://www.cnblogs.com/chris-oil/p/4205517.html
相关文章推荐
- 在Ajax回调方法中通过window.open方法下载文件被浏览器拦截的解决方法
- ajax回调中执行window.open被拦截的解决办法
- ajax异步请求中使用window.open会被浏览器拦截解决方案
- ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式
- ajax后 使用window.open() 浏览器出现拦截的解决办法
- ajax请求里面调用window.open会被浏览器拦截
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
- ajax和window.open()在部分浏览器中的冲突解决
- ajax请求成功后新开窗口window.open()被拦截解决方法
- js window.open新打开窗口总是被浏览器拦截的问题
- window.open被浏览器拦截的解决方案
- 异步请求后根据结果window.open方式打开新页面,浏览器拦截弹窗问题
- window.open打开新窗口被浏览器拦截的处理方法
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
- window.open被浏览器拦截的解决方案
- window.open被浏览器拦截后的自定义提示效果代码
- window.open 浏览器拦截解决
- window.open浏览器弹出新窗口被拦截
- ajax回调打开新窗体防止浏览器拦截方法
- 解决回车弹出新页面及弹新页面时被浏览器拦截window.open方法