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

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

问题:

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

分析:

浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。

解决方法:

1、异步改为同步,即:async:false

2、将新开窗口指向为一个对象,然后修改对象的 url,比如:

$('.task').bind('click',function(){var w = window.open();$.ajax({type: 'POST',url: '/surveyTask',dataType: 'json',error: function(){w.close();},success: function(res){w.location = res.url;}});
});

最后需要说明的是:网上的动态添加 form 新开窗口的方法,并不适合 ajax 请求,至少博主测试了下仍然被浏览器所拦截。

参考资料:弹窗解决最终奥义,人类再再也无法阻止弹窗了!

更多相关:

  • 1、定义拦截器,继承MethodFilterInterceptor  package com.life.stuts.interceptor;import java.util.Map;import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwo...

  • 每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器。selenium启动配置参数接收是ChromeOption...

  •   当然有部分童鞋反映这样设置了以后,部分css样式表修改了还是不管用,那么我们就需要针对浏览器做点骚操作了: 1.chrome(谷歌浏览器) (1)、F12在调试页面Network中勾选Disable cache (2)、按F5或右键“重新加载”刷新页面内容 (3)、 使用Ctrl+Shift+R或者Ctrl+...

  • 我们的使命是让您了解最新和最酷的Web开发趋势。这就是为什么我们每个月都会发布一些精选的资源,这些资源是我们偶然发现并认为值得您关注的。 1.Tessaract.js 强大的javascript(节点和浏览器)库,用于从图像中提取文本。它能自动检测文本的位置和方向,识别60多种语言,包括中文、阿拉伯语和俄语等。 2.OverlayS...

  • vue 在浏览器控制台怎么调试 谷歌插件vue Devtools 问题: vuejs里面的变量,怎么用浏览器的console查看? 例如,想在chrome里用console.log查看变量$data,会显示undefined。 解决方案: 再main.js里面声明window.Vue = new Vue window.Vue = n...

  • 温馨提示:以下系列的面试题是通过整合网上各位大牛的文章而成,站在巨人的肩膀上,能够让我们更进一步。 1、页面从输入URL到页面加载显示完成,这个过程中都发生了什么? 输入域名地址发送域名地址至DNS服务器并获得对应WEB服务器IP地址与WEB服务器建立TCP连接服务器的永久重定向响应(从http://example.com到http:...