2016/10/24 window.open隐藏参数、参数过长、中文编码问题

一般 window.open 传参数都是用Get.方式,在url后面拼接参数。
但这样有时候并不适用,如: 
1)不想被看到参数信息
2)参数过长,get有限制会被截断
3)可能有中文编码问题
所以需要用post方式 ,下面说的就是一种window.open发送post请求的方法。


网页的post一般是通过form表单的方式来实现的,所以现在来模拟form表单的方式来实现window.open效果。
主要是通过form的子元素来设置需要传递的参数,之后给form表单绑定提交事件并手动触发提交表单。完成后就是收尾工作————把创建的表单移除。
具体例子如下:
/*
*url:window.open需要的url
*data:存放window.open需要传递的参数,这里存放的是数组
*name:可传递设置窗体属性的参数等
*注:以上参数可以根据需要改变,当前的方式只是例子
*/
function openPostWindow(url, data, name){
		var categoryid = data[0];
		var reportId =data[1];
	
	//首先创建一个form表单
          var tempForm = document.createElement("form");  
          tempForm.id="tempForm1";
	//制定发送请求的方式为post
          tempForm.method="post"; 
	//此为window.open的url,通过表单的action来实现
          tempForm.action=url;
	//利用表单的target属性来绑定window.open的一些参数(如设置窗体属性的参数等)
          tempForm.target=name;  
          
	//创建input标签,用来设置参数
          var hideInput = document.createElement("input");  
          hideInput.type="hidden";  
          hideInput.name= "categoryid";
          hideInput.value= categoryid;


	//将input表单放到form表单里
          tempForm.appendChild(hideInput);  


          var hideInput2 = document.createElement("input");
          hideInput2.type = "hidden";
          hideInput2.name = "reportId";
          hideInput2.value = reportId;


          tempForm.appendChild(hideInput2);
          
	//此为给form表单绑定事件(onsubmit),由于存在浏览器兼容问题所以此处加了一个判断。
	//但实质都是为form表单绑定一个提交事件,以便之后触发实现window.open效果
          if(document.all){
              tempForm.attachEvent("onsubmit",function(){});        //IE
          }else{
              var subObj = tempForm.addEventListener("submit",function(){},false);    //firefox
          }


	//将此form表单添加到页面主体body中
          document.body.appendChild(tempForm);


	//然后触发onsubmit事件时执行openWindow(name)函数。因为有特定浏览器会打开一个空白页面所以这里的function(甚至整个if)可以根据情况省略,经试验这不会影响模拟window.open的效果。
          if(document.all){
              tempForm.fireEvent("onsubmit",function(){ openWindow(name); });
          }else{
              //tempForm.dispatchEvent(new Event("submit"));
              $("form").trigger("onsubmit",function(){ openWindow(name); });
          }


	//手动触发,提交表单
          tempForm.submit();


	//从body中移除form表单
          document.body.removeChild(tempForm);
}
function openWindow(name){
     window.open('about:blank',name,'height=400, width=400, top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes,location=yes, status=yes');
}<span style="font-family: Arial, Helvetica, sans-serif;">   </span>

这篇日志说是原创但其实算是总结,很多前辈都写过类似的文章。希望看到的各位不要较真。关于代码有其他意见的欢迎留言。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值