window.open以post方式将内容提交到新窗口


Posted in Javascript onDecember 26, 2012

第一种方式
最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容。虽然不怎么麻烦,但是如果内容么有在数据库里保存,仅仅是处以拟稿状态时,就不能实现了,用户还常常认为是个bug。考虑采用get的方式传递,把需要的内容都序列化然后,通过url去传,显得很臃肿,而且get的传递内容长度有限制。于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法整了这么一个两者结合的方式,将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中。

比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口。代码中只传递了一个参数内容,实际可传递多个。
具体代码如下:

<script> 
function openPostWindow(url, data, name) 
{ 
var tempForm = document.createElement("form"); 
tempForm.id="tempForm1"; 
tempForm.method="post"; 
tempForm.action=url; 
tempForm.target=name; 
var hideInput = document.createElement("input"); 
hideInput.type="hidden"; 
hideInput.name= "content" 
hideInput.value= data; 
tempForm.appendChild(hideInput); 
tempForm.attachEvent("onsubmit",function(){ openWindow(name); }); 
document.body.appendChild(tempForm); 
tempForm.fireEvent("onsubmit"); 
tempForm.submit(); 
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'); 
} 
</script>

第二种方式
function openWindowWithPost(url,name,keys,values) 
{ 
var newWindow = window.open(url, name); 
if (!newWindow) 
return false; 
var html = ""; 
html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>"; 
if (keys && values) 
{ 
html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>"; 
} 
html += "</form><script type='text/javascript'>document.getElementById('formid').submit();"; 
html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, ""); 
newWindow.document.write(html); 
return newWindow; 
}

推荐使用第一种方式,第二种方式测试过程中发现,与日历弹出框冲突,如果子页面上有日历弹出框,则点日历框会不停刷新页面,不会弹出日历框。当然,也可能是我用的日历框的问题。
Javascript 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
Nov 12 Javascript
简易js代码实现计算器操作
Apr 15 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
jquery对table做排序操作的实例演示
Aug 10 jQuery
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
jquery检测上传文件大小示例
Apr 26 jQuery
JavaScript中json对象和string对象之间相互转化
Dec 26 #Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 #Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 #Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 #Javascript
Javascript图像处理思路及实现代码
Dec 25 #Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 #Javascript
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 #Javascript
You might like
php防止sql注入简单分析
2015/03/18 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
python实现归并排序算法
2018/11/22 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
Python常用外部指令执行代码实例
2020/11/05 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
前台接待岗位职责
2013/12/03 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
导游词之杭州西湖
2019/09/19 职场文书
z-index不起作用
2021/03/31 HTML / CSS
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
Python进程池与进程锁之语法学习
2022/04/11 Python