使用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 ,但是却会被浏览器进行拦截,要手动开启才行,然后就搜索研究其他方法,就看 ...
随机推荐
- SQLServer2012 分页语句执行分析
上一篇文章提到了,SQLServer2012在使用Offset,Fetch语句分页时,获取了大量不需要的数据,导致查询效率低的问题. 现在让我们来看看,究竟是什么导致SQLServer不能按需取数呢? ...
- POJ 1838 Banana (并查集)
Description Consider a tropical forrest, represented as a matrix. The cell from the right top corner ...
- 【spring源代码分析】--Bean的解析与注冊
接着上一节继续分析,DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法: protected void parseBeanDefini ...
- 矩阵快速幂---BestCoder Round#8 1002
当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n) f(n-1)] = [f(n ...
- hihocoder第41周 骨牌覆盖(矩阵快速幂)
由于棋盘只有两行,所以如果第i列的骨牌竖着放,那么就转移为第1列到第i-1列骨牌有多少种摆法 如果第一行第i列骨牌横着放,那么第二行第i列也要横着放,那么就转移为了第1列到第i-2列骨牌有多少种方法 ...
- msyql在查询字段中的所有记录,不重复
mysql> select * from a ; +----+------+--------------+ | id | name | descri | +----+------+ ...
- Form表单中的action路径问题
今天刚接触web,在用jsp和servlet做一个简单的登陆的时候在Form表单action属性和method属性的一些问题: 我遇到的是Form表单提交到servelet处理时遇到的问题: (1 ...
- [Cocos2d-x v3.x]浅谈容器Vector
转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...
- BackTrack5 (BT5)无线password破解教程WPA/WPA2-PSK无线password皴
昨天公布了BackTrack5 (BT5)无线weppassword破解教程之minidwep-gtk破解法一文,对BT5下破解wep无线password的简单方法做了介绍,今天奶牛为朋友们介绍下怎样 ...
- 将本地文件上传到指定的服务器(HttpWebRequest方法)
将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...