使用window.open传递form

Form提交技巧
本文介绍了两种通过form表单提交数据的方法,一种是直接提交至新页面,另一种是在包含iframe的页面中实现跨页面数据传递。这两种方法有效解决了URL参数长度限制的问题。
 
使用window.open传递form
2008-06-22 20:27

//由于在url中传递参数时受到长度的限制(好像最大只能1024字节),只能用form方式提交数据到其他页面。

第一种方式:该方式可以直接将form里的内容提交到新打开的zuofei.jsp页面中。   

function getWH() { window.open("about:blank","toZuoFei",'status=yes,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,width=600,height=400,top=0,left=220'); document.zuofei.submit(); }

<form action="zuofei.jsp" ENCTYPE="multipart/form-data" method="post" name="zuofei" target="toZuoFei">

<input name="receiveunitName" type="hidden" value="sdf">
<input name="docId" type="hidden" value="asdf">
<input name="printnumber" type="hidden" value="dfgd">
<input name="selectprintnumber" type="hidden" value="34">

</form>

第二种方式:在form提交的页面里有iframe,其中的一个frame使用父页面中的form,为解决将数据从父页面传递到第三个页面(父窗体A打开一个页面B,B中嵌入或打开C页面,可以将A的数据直接提交到C页面中)。

A页面部分代码:

function getWH() { window.open("about:blank","toZuoFei",'status=yes,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,width=600,height=400,top=0,left=220'); document.zuofei.submit(); }

<form action="B.jsp" ENCTYPE="multipart/form-data" method="post" name="zuofei" target="toZuoFei">

<input name="receiveunitName" type="hidden" value="sdf">
<input name="docId" type="hidden" value="asdf">
<input name="printnumber" type="hidden" value="dfgd">
<input name="selectprintnumber" type="hidden" value="34">

</form>

<form action="C.jsp" method="post" name="sendform2" target="mainFrame">

<input name="receiveunitName" type="hidden">
<input name="docId" type="hidden" value="<%=docId%>">
<input name="printnumber" type="hidden" value="<waf:getSmartProperty id="doc" scope="request" property="printnumber" formatText="html" />">
<input name="selectprintnumber" type="hidden">

</form>

//B页面部分代码

<frameset rows="50,*" framespacing="0" border="1" onload="init()">
<frame src="addresshdtop.jsp?docId=<%=docId%>&printnumber=<%=printnumber%>&selectprintnumber=<%=selectprintnumber%>" name="topFrame" scrolling="NO" noresize>
<frame name="mainFrame" src="about:blank">
</frameset>

============================================================================

实践

<form name="ModifyShapDiffForm" action="$link.setAction('/MsGraphDiffAction')" method="get" target="diff">
    <div class="navi">
      <table border="0" cellpadding="0" cellspacing="0" width="100%">
        <tr>
          <td width="121"><input type="button" value="$text.get('mssearch.button.diff')" name="B3" onclick="return preCheck();"></td>

function sdf(){

window.open("about:blank","diff",'status=yes,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,width=600,height=400,top=0,left=220');
    document.ModifyShapDiffForm.submit();

使用 `window.open()` 传递参数给 JSP 页面时,若希望避免将参数附加到 URL 上,并确保数据能够安全地传输至目标页面,可以通过隐藏表单提交的方式实现。 创建一个 `<form>` 元素并将其 `method` 设置为 `post`,同时将 `target` 属性设置为 `_blank`,这样可以在新窗口中打开目标页面。通过 JavaScript 动态填充该表单中的隐藏字段值,并触发提交操作,从而以 POST 方法打开页面[^2]: ```html <form id="hiddenForm" action="target.jsp" method="post" target="_blank"> <input type="hidden" name="name" value=""> <input type="hidden" name="department" value=""> </form> <script> function openNewWindowWithData(name, department) { var form = document.getElementById("hiddenForm"); form.name.value = name; form.department.value = department; document.body.appendChild(form); form.submit(); } </script> ``` 当调用 `openNewWindowWithData("张三", "技术部")` 函数时,浏览器将以 POST 方式在新窗口中加载 `target.jsp` 页面,并携带两个参数:`name` 和 `department`。由于这些参数是通过 POST 提交的,因此不会出现在 URL 中,从而提升了安全性[^1]。 在目标 JSP 页面中,可以使用 `request.getParameter()` 方法获取这些参数,并进行相应的处理: ```jsp <% String name = request.getParameter("name"); String department = request.getParameter("department"); if (name != null && department != null) { out.println("姓名:" + name + "<br>"); out.println("部门:" + department); } else { out.println("参数缺失,请检查请求方式和数据是否正确提交。"); } %> ``` 需要注意的是,在某些情况下,JSP 页面可能会接收到两次请求:第一次是由 `window.open()` 引发的 GET 请求,此时参数为 `null`;第二次则是由隐藏表单提交引发的 POST 请求,此时参数已正确填充。因此,在进行加密或其他敏感操作之前,应先判断参数值是否为 `null`[^1]。 此外,还需注意浏览器的安全策略可能会影响 `window.open()` 的行为,特别是在弹出窗口被拦截的情况下。为了提升兼容性,建议在用户交互事件(如点击按钮)中触发 `window.open()` 调用[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值