Js中ajax window.open 被拦截问题解决办法

form 表单测试还是被拦截

<!--
<form name="loginform" id="loginform" action='a.html' method="post"  target="_blank" >                     
</form>  -->
 
var w = window.open();
 
  $.ajax({
    async:false,
   url:baseUrl+'aaa'
   success:function(data){
     if(data!=null){
  //  window.open(baseUrl+path);  
   // return false;
   // $('#loginform').submit();
   // form.target="_blank";
    //form.action=baseUrl+path;
    //form.submit();
    w.location = baseUrl+path;
}
   
}
});
 

参考这个就行了。。

分析:

浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _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 请求,至少博主测试了下仍然被浏览器所拦截。

时间: 2024-07-31 14:03:56

Js中ajax window.open 被拦截问题解决办法的相关文章

escape函数解决js中ajax传递中文出现乱码问题_javascript技巧

本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考.具体方法如下: 一.问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道. 二.解决办法: 1.首先对中文字符进行两次

jquery aja...-关于js中ajax的问题 我是新手^_^

问题描述 关于js中ajax的问题 我是新手^_^ for循环中txt=里面的childNodes[0].nodeValue里面的0是什么意思 为什么要这样 这句编码什么时候用啊 解决方案 childNodes 属性返回节点的子节点,0表示第一个子节点. 解决方案二: childNodes是xml节点数组,[0]就是取第一个xml节点

js jax 函数-js中Ajax返回的值怎么当函数返回值供别的函数调用?

问题描述 js中Ajax返回的值怎么当函数返回值供别的函数调用? 如上图代码 我调用时返回的是undefined 解决方案 改为同步,而且你的回调里面返回值没用,并不是你的getTotalIntegral的返回值,还有以后代码,不要发截图.看桌就烦 function getTotalIntegral(){ //...原来的代码 var rst=false; $.ajax({ async:false,/////////////同步 success:function(data){ if(data.s

Android 中TextView的使用imageview被压缩问题解决办法

Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图: 今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列.我的本意是imageview显示相同的图片,textview显示文本,但是运行程序后发现,当某个textview的文本较多时,imageview会被压缩,刚开始没注意,检查代码了好久. 代码示例如下: <!--文本少的item--> <LinearLayou

js中ajax 传递中文乱码问题解决办法

解决的办法是使用js的encodeURI函数,对传递的参数进行编码.  代码如下 复制代码 var keywords=encodeURI(document.getElementById("suggestfilm").value); 例  代码如下 复制代码 <script type="text/javascript">         //var data=<%=data %>     jQuery(document).ready(funct

js中的window.onload和jquery中的load区别的讲解

JavaScript 中的以下代码  [javascript] view plaincopyprint? Window.onload = function (){      // 编写代码 }   Window.onload = function (){ // 编写代码 }  等价于   Jquery 代码如下:  [javascript] view plaincopyprint? $(window).load(function (){        // 编写代码  });   $(windo

js中ajax跨域之cors几个例子分析

由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),ajax跨域请求的两种方案 方案一:jsonp (JSON with Padding)    但是jsonp有一个缺点就是不支持get传参 方案二:CORS(跨域资源共享,Cross-Origin Resource Sharing) 此方案支持post提交     假设我们在http://www.a域名.com域名ajax请求http://www.111cn.net域名下的数据:若使用cors来实现,ajax跨

js中的Window对象

JavaScript分为 ECMAScript,DOM,BOM; DOM 是指文档对象模型,并非一个对象; BOM就是浏览器窗口对象模型,顶级对象是window; window,document都是一个实例对象,他们都属于Object,表示浏览器中打开的窗口 Window对象是客户端javascript最高层对象之一;只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY.FRAMESET或FRAME元素时,都会自动建立window对象的实例;另外,该对象的实例也可由window.op

JS 中AJAX回调函数success内的代码执行问题,有时执行,有时不执行

问题描述 在body中<asp:ButtonID="Button1"runat="server"Text="查询"OnClientClick="javascript:returnreport();"/>在<script>中functionreport(){Ext.Ajax.request({url:"/XFStatbyDay/XFStatbyDay",success:function