使用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 ,但是却会被浏览器进行拦截,要手动开启才行,然后就搜索研究其他方法,就看 ...
随机推荐
- Jedis Client的使用以及序列化
JedisPool pool = new JedisPool(poolConfig, IP, PORT, timeout); public String set(String key,String v ...
- Android Bitmap 载入与像素操作
Android Bitmap 载入与像素操作 一:载入与像素读写 在Android SDK中,图像的像素读写能够通过getPixel与setPixel两个Bitmap的API实现. Bitmap AP ...
- 【 D3.js 高级系列 — 8.0 】 打标
有时,需要在地图上画线.代表"从地方到什么地方"的含义,因此,在连接的映象绘制时.称为"打标". 1. 标线是什么 标线.是指地图上须要两个坐标以上才干表示的元 ...
- GlusterFS源代码解析 —— GlusterFS 简单介绍
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564185 -- -- 本系列博客源代码是基于GlusterFS 3 ...
- php获取前一天,前一个月,前一年的时间
获取前一天的时间: $mytime= date("Y-m-d H:i:s", strtotime("-1 day")); 获取三天前的时间: $mytime= ...
- Codeforces Round #256 (Div. 2) C. Painting Fence 或搜索DP
C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard in ...
- Path相关评论的方法(一)
以前的主要是关于Canvas的translate(平移) .scale(缩放) .rotate(旋转) .skew(错切).接下来几篇主要讲下android里的Path(封装了贝塞尔曲线)& ...
- 佛祖保佑 永无BUG 永不改动
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // / ...
- c++程序代写(qq:928900200)
1. Both main memory and secondary storage are types of memory. Describe the difference between the ...
- 【原创】leetCodeOj --- Binary Tree Right Side View 解题报告
二连水 题目地址: https://leetcode.com/problems/binary-tree-right-side-view/ 题目内容: Given a binary tree, imag ...