ajax请求window.open()被拦截
项目使用ajax post后根据返回的success,需要打开一个新页面,使用window.open发现谷歌浏览器直接被拦截。
后来了解发现该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),
浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以也会被拦截。废话不多说,直接上终极解决办法
解决方法:
var newwin = window.open(); // 这句必须在ajax之前定义
$.ajax({
type: 'POST',
url: '/do.php',
dataType: 'json',
error: function(){
newwin.close();
},
success: function(data){
newwin.location = data.url;
}
});
也没首页会打开一个空白页面随后跳转到返回的url上,期间时间间隔很短。如果异步请求执行快几乎没有啥影响。
经测谷歌/360浏览器正常。
网上很多人说改成同步syns。。其实没实际卵用,它必须响应时间极短才能见效,不信大家可以试试,但是上面的代码在微信上行不通
微信不支持window.open ,至少我的安卓微信上是无法通过window.open打开窗口的,但是可以通过self.location.href='new.html'打开。
总结:上面通过window.open开始就打开空白页,体验不好,对于ajax 页面跳转打开新窗口确实没啥好的办法,还要兼顾微信和手机浏览器的兼容性问题:
最终我直接改成页面跳转,解决微信和其他浏览器的兼容问题:目前各浏览器和微信上一切正常:
$(document).ready(function () {
$.post("/do.php", {
order_sn: "111111"
},
function (data) {
var data = eval("(" + data + ")");
if(data.tatus==1)
self.location.href = "";// 跳转到新页
});
});
ajax请求window.open()被拦截的更多相关文章
- springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置
web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...
- JS 点击元素发ajax请求 打开一个新窗口
JS 点击元素发ajax请求 打开一个新窗口 经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打 ...
- ajax请求成功后打开新开窗口(window.open())被拦截的解决方法
问题:今天在做项目时需要在ajax请求成功后打开一个新的窗口,此时遇到浏览拦截了新窗口的问题,尝试在ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('clic ...
- ajax请求成功后新开窗口window.open()被拦截解决方法
ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢 问题: 前面开发项目时碰到一个问题,ajax 异步请求 ...
- ajax请求成功后新窗口window.open()被拦截的解决方法
ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限 ...
- ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式
一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并 ...
- 如何使用 window.open() 处理ajax请求返回的url: 在本页面打开并防止浏览器拦截
ajax请求中用window.open()打开请求返回url(例如实现下载功能时),可能会因为跨域问题导致浏览器拦截 解决办法是:在请求前,打开一个窗口,请求成功后将返回的url直接赋值给该窗口的hr ...
- ajax请求后弹开新页面被浏览器拦截
window.open()我想应该很多人都不陌生吧,它可以实现除用a标签以外来实现打开新窗口! 最近开发项目用到时,却遇到了麻烦,本来好好的弹出窗口,结果被浏览器无情的给拦截了! 代码如下: $.ge ...
- 解决拦截器对ajax请求的的拦截
拦截器配置: public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) ...
随机推荐
- session熟知
Session 服务器端保存会话信息的技术. //如何获得session HttpSession session = request.getSession(); //如何操作session sessi ...
- 部署Dubbo监控中心
1.部署监控中心: [root@localhost ~]# cp dubbo-admin-2.5.4.war apache-tomcat-7.0.47/webapps/dubbo-admin.war ...
- 5月11日——IOS下如何检测用户是否安装微信
执行如下代码: var WXApi = plus.ios.import("WXApi"); var isWXInstalled = WXApi.isWXAppInsta ...
- MySql中innodb存储引擎事务日志详解
分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...
- linux常用的时间获取函数(time,gettimeofday,clock_gettime,_ftime,localtime,strftime )
time()提供了秒级的精确度 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒 ...
- SIMATIC_STEP_V5.6使用报错
SIMATIC_STEP_V5.6是西门子出来的一款能够在Windows 10上运行的step 7软件. 正常的安装步骤我们可以在百度上面进行一些查找,在这里我将我遇到的一个问题发出来. 在Windo ...
- Java公开课-03.内部类
一.内部类的作用 1.实现了类的隐藏 2.实现了多重继承 3.内部类拥有外部类所拥有的属性和方法的访问权限 4.避免修改接口的时候出现同名方法 二.内部类--成员内部类 1.如果我们想访问内部类,我们 ...
- MySQL大量数据入库的性能比较
单位IM改版了用户聊天内容要存放在数据库. 一般JAVA Insert MySQL有如下几种方式1.自动提交Insert2.事务提交Insert3.批量提交4.使用Load File接口 模拟表结构如 ...
- zookeeper 配置文件conf目录下 zoo文件 配置详解
clientPort:客户端尝试连接server的端口号 (对外服务端口) 通常为2181 dataDir:存放快照文件snapshot的目录.(储存数据的目录) dataLogDir:事务日志存放位 ...
- [爬虫]BeautifulSoup4
1.Beautiful Soup的简介 Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函 ...