基本业务是这样子的:根据给定的用户名和密码,加密后生成二维码然后打印出来。看似简单的一句话,存在两个大问题:
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
相关推荐
然而,如果我们想要以POST方式传递参数,就不能直接通过`url`参数实现。POST方式的参数通常是在HTML表单中定义,然后通过表单的提交(`submit`)事件来发送。因此,我们需要创建一个隐藏的表单,填入参数,然后在新...
在上述描述中,提到的问题是在SSH框架下,URL长度受限且需要隐藏某些参数,因此需要寻找一种方式来通过POST传递参数。一种常见的解决方案是创建一个动态的表单,将数据放入隐藏的输入字段,然后模拟表单提交来实现...
1. **使用URL参数**:在`window.open`的`url`中添加查询参数来传递数据。例如: ```javascript var url = "child.html?data=" + encodeURIComponent(value); var newWindow = window.open(url, "child"); ``` 2...
于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法
- 使用`window.open`时,数据交互需要通过其他方式实现,如使用`postMessage`API。 综上所述,`showModalDialog`和`window.open`各有优势和局限性,开发者应根据具体需求选择合适的方法。在现代Web开发中,由于`...
总结来说,刷新由 `window.open` 打开的父页面主要依赖于 `window.opener` 属性,结合 `location.reload()` 方法实现。在某些特定情况下,如跨域或有其他需求时,可以采用上述其他通信手段来实现类似功能。在实际...
在Web开发中,`window.open()` 是一个非常重要的JavaScript函数,用于在用户的浏览器中打开新的窗口或标签。这个函数在创建交互式用户体验时扮演着关键角色,允许开发者控制新窗口的大小、位置以及加载的URL。现在...
window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作...
发送消息时,调用`postMessage`方法,传入两个参数:要传递的数据和接收数据的窗口的引用(通常是`window`对象的引用或`iframe`的`contentWindow`属性)。 接收窗口需要监听`message`事件来接收数据。当接收到消息...
综上所述,要在同一个标签页中使用 `window.open()` 或类似方法打开新的 URL,关键在于控制 `window.open()` 的 `name` 参数或者通过其他方式(如表单提交)来实现。当 `name` 参数与已存在的窗口或标签页匹配时,新...
`doPostBack`是ASP.NET中实现页面回发的关键工具,而在弹出窗体与父窗体间传递数据则需要利用各种JavaScript和ASP.NET的技术,包括URL参数、全局变量、Session/Cookie、`window.opener`以及HTML5的`postMessage`等...
在发送窗口(子窗口)中,使用`window.opener.postMessage(data, targetOrigin)`发送消息,其中`data`是你要传递的数据,`targetOrigin`是接收窗口的源。在接收窗口(父窗口)中,需要添加事件监听器: ```...
初始化请求是通过`open()`方法实现的,它接受三个参数:请求类型(如"GET"或"POST"),URL,以及一个布尔值表示是否异步执行。 ```javascript xhr.open('GET', 'http://example.com/data', true); ``` **二、设置...
最后,关于标签“传值”,在Web开发中,数据传递通常有多种方式,如URL查询字符串、POST请求、localStorage、sessionStorage、cookies等。在EasyUI的弹窗场景中,我们主要关注的是通过查询字符串和JavaScript对象...
本篇文章将深入探讨如何使用`window.open()`方法实现这一目标。`window.open()`是JavaScript中的一个内置函数,用于打开新的浏览器窗口或者标签页,并可以指定新窗口的URL、尺寸以及窗口特性。 首先,我们来了解`...
在一些交互场景下,我们需要在弹出层中操作并获取相关参数,然后在关闭弹出层时传递这些参数给父页面进行处理。本文将详细介绍如何通过 `layer.open` 的回调函数来获取弹出层参数并进行后续操作。 首先,让我们来看...
`window.postMessage()`方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文档的消息传递,即跨域通信。它的工作原理是:一个窗口向其打开的子窗口、其父窗口或者任何其他与之有某种关系的窗口发送...