跨域名跳转之实践 window.name

297 阅读1分钟

背景情况

  • 背景:项目改版,需要将登录页面单独拆出来,作为门户网站,而后根据用户选择的地区跳转至不同站点,一开始觉得并不复杂,就是把多个一对一的项目拆成一对多个项目而已,没想到遇到了问题。
  • 问题:问题在于跨站点通信的传参安全性问题。

思路尝试

  • location.href ,通过添加 form 节点模拟表单提交从而 post 传参,结论:失败,无法达到理想效果。
  • postMessage,通过 postMessage 通信传参,结论:因为必须两个站点同时存在,才能通信,适用于 iframe 嵌入的子页面或者同时存在的两个站点互相通信,并不适用于这种跳转性质的通信。
  • localStorage 和 sessionStorage ,结论:不安全,容易被人看到。

最终办法

  • window.name
  • window.name 是一个浏览器窗口的属性,设置的值都会被字符串化,除了 symbol , window.name 属性的神奇之处在于 name 值在不同的页面(甚至不同域名)加载后依旧存在(如果没修改则值不会变化),并且可以支持非常长的 name 值(2MB)。并且 window.name 很方便。
  • image.png
  • image.png
  • 当浏览器的页面关闭, window.name 也随即销毁。
  • 由于 window.name 是存在于本地内存中的,跳转到新域名后即刻手动进行销毁,且未走网络传输渠道,因此安全性是有保证的,当然如果后端能进行重定向是最好的,但是在后端不改变的情况下,纯前端这样做已经是可以的了。

拓展

  • 下一步可以看看 postMessage