使用js在新窗口中POST数据
最近在做自己的博客,写文章的时候有一个预览功能,当时使用的是弹出框来进行预览,感觉体验不是很好。
然后想到了写邮件时候的新窗口预览,查了下126邮箱和qq邮箱的预览实现效果,以及各种谷歌百度stackoverflow进行搜索。得出以下方案。
/*
* 在新窗口POST
* action: form的action属性,要post的地址(url)
* data: form中的数据,数据格式为 [{name: "", value: ""}, {name: "", value: ""}]
* data的值可以使用jQuery的方法 $("#form1").serializeArray()获得。
*/
createPostNewWindow: function(action, data){
var _doc = document;
var _form = _doc.createElement("form");
_form.method = "POST";
_form.target = "_blank";
_form.action = action;
data.forEach(function(element) {
var _input = _doc.createElement("input");
_input.type = "hidden";
_input.name = element.name;
_input.value = element.value;
_form.appendChild(_input);
});
_doc.body.appendChild(_form);
_form.submit();
_doc.body.removeChild(_form);
}
126邮箱的预览的js代码没有扒到,最后扒到了qq邮箱的写法,然后进行了修改。
qq邮箱的代码文件地址为(做了防盗链):http://rescdn.qqmail.com/zh_CN/htmledition/js/webp/compose2285a6b.js
其实现的核心代码:
_createPostNewWindow: function(_asName, _asSrc, _aoData, _asWinParam) {
var _oCompose = this;
var _oWin = _oCompose.getWin();
var _oTop = getTop();
var _oDoc = _oWin.document;
var _sNewWinFormId = "_creAtenEWpOstwIn_";
_oNewWinForm = getTop().S(_sNewWinFormId, _oWin);
if (!_oNewWinForm)
{
_oNewWinForm = _oDoc.createElement("form");
_oNewWinForm.id = _sNewWinFormId;
_oNewWinForm.method = "post";
_oDoc.body.appendChild(_oNewWinForm);
}
_oNewWinForm.innerHTML = "";
if (_asSrc.indexOf("sid=") < 0)
{
_asSrc = [_asSrc, _asSrc.indexOf("?") < 0 ? "?" : "&", "sid=", getTop().getSid()].join("");
}
_oNewWinForm.action = _asSrc;
_oNewWinForm.target = _asName;
_oNewWinForm.onsubmit = function() {
_oWin.open('about:blank', _asName, _asWinParam);
}
;
_aoData = _aoData || {};
_aoData.sid = _aoData.sid || getTop().getSid();
getTop().E(_aoData, function(_asValue, _asKey) {
var _oInput = _oDoc.createElement("input");
_oInput.type = "hidden";
_oInput.name = _asKey;
_oInput.value = _asValue;
_oNewWinForm.appendChild(_oInput);
});
_oNewWinForm.submit();
}
搜索有说使用window.open会被浏览器给拦截,反正没有试过,将form的target属性设置为_blank,则会在新的窗口中进行post操作,因为预览和发布文章是一个form,所以决定预览的时候新建一个form窗口进行操作。
使用js在新窗口中POST数据的更多相关文章
- 优秀前端工程师必备: 我要一个新窗口: js开新窗的2种姿势
1.<a href="https://www.cnblogs.com/" title="博客园">当前页面打开博客园</a> js代码等 ...
- 【转载】解决window.showModalDialog 模态窗口中location 打开新窗口问题
来源: <http://bibipear.blog.sohu.com/143449988.html> 在我们的项目中,通常会用到showModalDialog 打开一个模态的子窗口,但是在 ...
- js打开新的链接
当前页面打开一个链接:window.location="URL" 打开一个新的页面,再打开一个新的链接:window.open(URL,窗口名称,窗口风格) window对象具有如 ...
- 关于iframe和div窗口中ajax请求200状态时执行的回调问题
上一篇说了在ajax回调里面处理iframe窗口的刷新问题,这一篇记录一下遇到的一个分别在iframe和div窗口中ajax请求200状态时执行的回调问题. 我们先来看一下ajax请求的写法(这里使用 ...
- Ext JS 4 新特性2:配置项属性(config)之一
Ext JS 4 新特征2:配置项属性config 最新版本的Ext JS 4.2的另外一个伟大的新特征就是增加了configuration配置项属性,当我们在创建一个新类的时候,经常性的要设置某某属 ...
- Ext JS 6 新特性和工具
Ext JS 6 新特性和工具 Ext JS 6 带来很多新特性.工具和改进.以下是一些亮点: • 合并了 Ext JS & Sencha Touch - 在 Ext 6, 你可以访问 Ext ...
- js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题
js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...
- js怎样得出数组中某个数据最大连续出现的次数
1:js怎样得出数组中某个数据最大连续出现的次数 var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ; var j = 0 ; var max ...
- js 打开新窗口方式
之前的项目,有个功能是下载文件,这里只要在浏览器输入 url 就会下载那个文件了.当时我只是简单得使用 window.open ,但是却会被浏览器进行拦截,要手动开启才行,然后就搜索研究其他方法,就看 ...
随机推荐
- Yii学习笔记之三(在windows 上安装 advanced )
首先说一下下载地址: http://www.yiiframework.com/download/ 然后将下载下来的文件进行解压到 你指定的文件夹 解压过程中假设报什么错误 直接忽略掉 我的解压文件夹是 ...
- 关于IE打印预览内容显示不全的问题解决
眼下在调整一个页面打印功能的时候,发现多行文本框TextArea在页面显示的时候,多行文本能够正常显示,可是在打印页面的时候.部分内容就被遮挡住了, 苦思冥想不得其解,后来还是请教了美工. 首先查了下 ...
- C#索引器的应用:自已写一个表格
C#中索引器,在一个类中有很多的同一类型成员的时候,比较适用索引器. 环境:我们假设有一个动物园,里边有很多动物. 用法: 1.先定义一个类,这是成员的类型.在这里就是要定义一个Animal类: pu ...
- (017)将一棵二叉查找树重构成链表(keep it up)
给定一棵二叉查找树,设计算法,将每一层的全部结点构建为一个 链表(也就是说, 假设树有D层,那么你将构建出D个链表). 这个题实质是个BFS,可是实现起来有点麻烦,又不像常见的BFS, 所以编写代码时 ...
- servlet 实现下载文件
servlet: public class UpAndDownServlet extends HttpServlet { public void doPost(HttpServletRequest r ...
- USACO sprime
/* ID:kevin_s1 PROG:sprime LANG:C++ */ //N = 1仅仅可能为2,3,5,7.N > 1仅仅可能为1,3,7.9. N = i,到N = i + 1递推假 ...
- Preference如何增加在activity生命周期监听器
转载请注明出处:http://blog.csdn.net/droyon/article/details/41313115 本文主要介绍Preference凭什么Activit一些逻辑的生命周期,使. ...
- centos7 设备 mariadb-10
下载地址: http://mirrors.ustc.edu.cn/mariadb/mariadb-10.0.19/source/mariadb-10.0.19.tar.gz 由于用cmake所以线安装 ...
- ASP.NET Core 1.0 部署 HTTPS
ASP.NET Core 1.0 部署 HTTPS ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1) 提示 更新时间:2016年01月23日. 在目前介 ...
- WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体
原文:WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体 运行结果: 事实上很简单,定义好一个正方体,处理好纹理.关于MeshGeometry3D的正确定义和纹理这里就不多讲 ...