window.open以POST方式打开新窗口

主要是以下两个原因:

1)后面的参数太长,需要传输大量数据,而浏览器对url长度是有限制的;

2)涉及到一些敏感数据,不想直接暴露出来;

所以我们可以借用表单来提交数据,首先用window.open()来创建一个空的页面,然后动态创建一个表单,将要传递的数据,填充到这个表单中,把这个表单插入到这个空页面中,最后自动提交表单,跳转到我们指定的页面。

        

function openPostWindow(url, params) {
      
    var newWin = window.open(),
          formStr = '';
     //设置样式为隐藏,打开新标签再跳转页面前,如果有可现实的表单选项,用户会看到表单内容数据
     formStr = '<form style="visibility:hidden;" method="POST" action="' + url + '">' +
          '<input type="hidden" name="params" value="' + params + '" />' +
          '</form>';

   newWin.document.body.innerHTML = formStr;
   newWin.document.forms[0].submit();
   
   return newWin;
}

在使用`window.open`打开不同源的新窗口时,由于跨域安全策略的限制,无法直接在新窗口中设置sessionStorage和localStorage。这是因为浏览器对不同源的窗口之间的数据访问进行了限制。 但是,你可以通过以下方法在不同源的新窗口中传递数据: 1. 使用URL参数:将需要传递的数据作为URL参数附加到打开的URL中,然后在新窗口中解析URL参数来获取数据。例如: ```javascript var newWindow = window.open('https://example.com?data=value'); ``` 在新窗口的页面中,你可以使用JavaScript解析URL参数来获取数据。 2. 使用postMessage API:使用postMessage API可以实现窗口间的安全跨域通信。在打开新窗口中,你可以使用`window.postMessage`发送消息,并在新窗口的页面中添加事件监听器来接收消息。例如: 在当前窗口: ```javascript var newWindow = window.open('https://example.com'); newWindow.postMessage('value', 'https://example.com'); ``` 在新窗口的页面中添加事件监听器: ```javascript window.addEventListener('message', function(event) { // 判断消息来源是否可信 if (event.origin === 'https://example.com') { // 获取传递的数据 var data = event.data; // 在新窗口中处理数据 sessionStorage.setItem('key', data); } }); ``` 通过以上方法,你可以在不同源的新窗口中传递数据,并在新窗口中进行处理。 请注意,使用postMessage API时需要确保消息来源可信,以防止恶意代码的注入和跨站点脚本攻击。 希望这可以帮助到你!如果你有更多问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值