`

利用window.open实现post方式的传递参数

    博客分类:
  • JS
阅读更多

基本业务是这样子的:根据给定的用户名和密码,加密后生成二维码然后打印出来。看似简单的一句话,存在两个大问题:

1、打印功能时不能指定打印区域的,要打印只能打印整个页面,不可能只打印二维码所在的小片区域。那么只能重新开一个窗口,然后单独打印这一个窗口;

2、重新打开窗口时需要带参数,而且参数必须是隐藏的。window.open()默认带参数的方法是在url中直接添加参数,这样子参数信息就会暴漏出来。

基于以上两个问题,考虑使用POST的方式进行提交。

 

基本思路如下:

1、定义一个POST提交方式的form表单,target为QRcodeWin,将数据存放到其中的两个隐藏域中。

2、window.open()时目标设置为form的target

3、提交表单。

 

具体代码如下:

//判断表单是否存在,若不存在则在body中添加form表单
if($("#QRcodeForm").length<=0){
	var form = "<form id='QRcodeForm' action='print/printCredentials.jsp' method='post' target='QRcodeWin'>" +
			"<input type='hidden' id='clientName' name='clientName'/>" +
			"<input type='hidden' id='clientPwd' name='clientPwd'/>" +
			"</form>";
	$("body").append(form);//在body中添加form表单
}
//将用户名和密码保存到form表单的隐藏域中
$("#clientName").val(clientName);
$("#clientPwd").val(clientPwd);
//打开新的窗口
window.open("print/printCredentials.jsp","QRcodeWin","_blank");
//提交表单
$("#QRcodeForm").submit();

值得一提的是:

在JSP页面,通过request.getParameter("clientName");获取参数会获取到两遍,第一遍是window.open()访问的因为没有提交数据所以数据都是null,第二遍是form表单提交的有数据所以能拿到。因此在进行加密时需要判断一下参数值是否为null。

参考链接:http://aguu125.iteye.com/blog/1545737

 

分享到:
评论

相关推荐

    window.open 以post方式传递参数示例代码

    然而,如果我们想要以POST方式传递参数,就不能直接通过`url`参数实现。POST方式的参数通常是在HTML表单中定义,然后通过表单的提交(`submit`)事件来发送。因此,我们需要创建一个隐藏的表单,填入参数,然后在新...

    window.open()实现post传递参数

    在上述描述中,提到的问题是在SSH框架下,URL长度受限且需要隐藏某些参数,因此需要寻找一种方式来通过POST传递参数。一种常见的解决方案是创建一个动态的表单,将数据放入隐藏的输入字段,然后模拟表单提交来实现...

    window.open父子窗口传值问题

    1. **使用URL参数**:在`window.open`的`url`中添加查询参数来传递数据。例如: ```javascript var url = "child.html?data=" + encodeURIComponent(value); var newWindow = window.open(url, "child"); ``` 2...

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

    于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法

    showModalDialog和window.open

    - 使用`window.open`时,数据交互需要通过其他方式实现,如使用`postMessage`API。 综上所述,`showModalDialog`和`window.open`各有优势和局限性,开发者应根据具体需求选择合适的方法。在现代Web开发中,由于`...

    window.open的页面如何刷新(父页面)上层页面

    总结来说,刷新由 `window.open` 打开的父页面主要依赖于 `window.opener` 属性,结合 `location.reload()` 方法实现。在某些特定情况下,如跨域或有其他需求时,可以采用上述其他通信手段来实现类似功能。在实际...

    windowOpen打开新窗口

    在Web开发中,`window.open()` 是一个非常重要的JavaScript函数,用于在用户的浏览器中打开新的窗口或标签。这个函数在创建交互式用户体验时扮演着关键角色,允许开发者控制新窗口的大小、位置以及加载的URL。现在...

    HTML5如何用window.postMessage在网页间传递数据

    window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作...

    利用HTML5的window.postMessage实现跨域通信

    发送消息时,调用`postMessage`方法,传入两个参数:要传递的数据和接收数据的窗口的引用(通常是`window`对象的引用或`iframe`的`contentWindow`属性)。 接收窗口需要监听`message`事件来接收数据。当接收到消息...

    Window.Open如何在同一个标签页打开

    综上所述,要在同一个标签页中使用 `window.open()` 或类似方法打开新的 URL,关键在于控制 `window.open()` 的 `name` 参数或者通过其他方式(如表单提交)来实现。当 `name` 参数与已存在的窗口或标签页匹配时,新...

    Asp.net中doPostBack介绍和弹出窗体与父窗体之间的传值

    `doPostBack`是ASP.NET中实现页面回发的关键工具,而在弹出窗体与父窗体间传递数据则需要利用各种JavaScript和ASP.NET的技术,包括URL参数、全局变量、Session/Cookie、`window.opener`以及HTML5的`postMessage`等...

    通过window.opener控制父窗体

    在发送窗口(子窗口)中,使用`window.opener.postMessage(data, targetOrigin)`发送消息,其中`data`是你要传递的数据,`targetOrigin`是接收窗口的源。在接收窗口(父窗口)中,需要添加事件监听器: ```...

    window.XMLHttpRequest详解

    初始化请求是通过`open()`方法实现的,它接受三个参数:请求类型(如"GET"或"POST"),URL,以及一个布尔值表示是否异步执行。 ```javascript xhr.open('GET', 'http://example.com/data', true); ``` **二、设置...

    javascript 两个页面之间传值

    本篇文章将深入探讨如何使用`window.open()`方法实现这一目标。`window.open()`是JavaScript中的一个内置函数,用于打开新的浏览器窗口或者标签页,并可以指定新窗口的URL、尺寸以及窗口特性。 首先,我们来了解`...

    layer.open回调获取弹出层参数的实现方法

    在一些交互场景下,我们需要在弹出层中操作并获取相关参数,然后在关闭弹出层时传递这些参数给父页面进行处理。本文将详细介绍如何通过 `layer.open` 的回调函数来获取弹出层参数并进行后续操作。 首先,让我们来看...

    easyUi弹出window窗口传值与调用父页面的方法,子页面给父页面赋值

    最后,关于标签“传值”,在Web开发中,数据传递通常有多种方式,如URL查询字符串、POST请求、localStorage、sessionStorage、cookies等。在EasyUI的弹窗场景中,我们主要关注的是通过查询字符串和JavaScript对象...

    layer弹窗:top.layer弹窗到父页面跨域解决办法

    `window.postMessage()`方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文档的消息传递,即跨域通信。它的工作原理是:一个窗口向其打开的子窗口、其父窗口或者任何其他与之有某种关系的窗口发送...

Global site tag (gtag.js) - Google Analytics