js控制表单提交,新窗口打开

今天做网银支付的时候,需要做到点击支付的时候提交订单,然后新窗口打开支付界面。

思路1:window.open(''),这个直接被pass了,因为银行的服务一般都是需要post数据的。就算是可以用get传递参数,window.open会被大部分浏览器拦截弹窗;

思路2:ajax成功之后,回调funciton中操作页面的一个带有'_blank'属性的表单,这个是网上大部分朋友提供的思路,但是已然不行,存在了跨域操作的'_blank'表单被脚本提交的时候,已然被拦截;

思路3:ajax成功之后, 回调funciton中操作页面的一个带有'_blank'属性的表单,表单的action指向同域名的一个url,在这个url里面重新生成一个新的不带'_blank'的表单,表单action指向需要提交的最终目的地url,表单里面用js操作一个在当前页面提交,本来以为这样可以欺骗到浏览器然浏览器认为这个'_blank'表单是指向同域名而不被拦截,但是相当遗憾的是,这个办法也失败了,带有'_blank'属性的表单,就算只指向同域名的url,也会被大部分浏览器拦截。

到这个时候,我已经有些无奈,准备和客户pk只能让用户添加信任网站,或者不在新窗口打开支付界面。

思路4:完全是灵光一现,误打误撞。ajax设置同步操作,在ajax执行完成之后,再用js执行带有'_blank'属性的表单提交,非常意外的是,居然在所有的浏览器都实现了新窗口打开而不被拦截

js代码如下:

        var result;  
  
$.ajax({  
           async: false, //就是设置这个最为关键的ajax同步  
           type: 'POST',  
           url: ctx + "/sales/submitBank",  
           data: orderPost,  
           success: function(datas){  
               result = datas;  
           }  
       });  
//同步ajax执行完成  
//以下是动态生成表单提交  
     var str = [];  
     str.push('<form action="postcash" id="gobank"  method="get">');  
     str.push('<input  name="acceptId" value="' + datas.acceptId + '" id="postbankacceptId"/>');  
     str.push('<input  name="time" value="' + datas.time + '"/>');  
     str.push('<input  name="key" value="' + datas.key + '"/>');  
     str.push('<input  name="merchantId" value="' + datas.merchantId + '" id="postbankmerchantId"/>');  
     str.push('</form>');  
     $("body").append(str.join(''));  
     $("#gobank").attr('target', '_blank');  
     $("#gobank").submit();  

具体为什么会有这样的结果,我还没有研究的出来,也许是执行ajax同步锁定浏览器的时候,让浏览器SB掉了,不过总归说来,这样是可以欺骗浏览器来达到js新窗口打开页面的效果的

如果不需要执行ajax,也可以先执行一个完全没有作用的ajax来实现这个目的
 

ps:也许做弹窗广告的兄弟看到这个,会爽歪歪,不过请考虑下一般用户的耐受性…………


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值