前端页面传参:选对方法,避开那些“坑” 开门见山,先说结论:URL参数最常用,但有长度和安全限制;sessionStorage适合传递结构化对象,且不暴露在地址栏;而一旦涉及跨域,就必须搬出postMessage,别再硬往URL里塞了。 使用 URLSearchParams 拼接参数,告别手动编码的

开门见山,先说结论:URL参数最常用,但有长度和安全限制;sessionStorage适合传递结构化对象,且不暴露在地址栏;而一旦涉及跨域,就必须搬出postMessage,别再硬往URL里塞了。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
URLSearchParams 拼接参数,告别手动编码的烦恼手动拼接字符串,比如url + 'id=' + id + '&name=' + name,这其实是个高危操作。想想看,如果name值里包含&或空格,整个参数结构就断掉了;中文不编码直接就是乱码。这时候,浏览器原生的URLSearchParams API就是你的救星,它能自动处理好所有这些细节:
const params = new URLSearchParams({ id: 123, name: '张三', tags: ['a', 'b'] }); —— 数组会被自动转换为tags=a&tags=b的格式。location.href = 'detail.html' + params.toString(); —— 安全拼接,无需再手动调用encodeURIComponent。location.search。sessionStorage 传对象,比URL更干净利落需要传递像 { userId: 1001, permissions: ['read', 'edit'], config: { theme: 'dark' } } 这样的复杂对象吗?用URL编码后会变得又长又难读,而sessionStorage则可以直接存储JSON字符串,清爽得多:
sessionStorage.setItem('pageData', JSON.stringify(obj)); location.href = 'target.html';const data = JSON.parse(sessionStorage.getItem('pageData') || '{}'); —— 这里必须加上空值判断,否则JSON.parse(null)会直接报错。sessionStorage.removeItem('pageData')。否则,用户刷新页面时会重复读取到旧数据。sessionStorage。postMessage 是唯一选择当从https://a.com/a.html跳转到https://b.com/b.html时,URL参数虽然能带过去,但sessionStorage、localStorage是完全隔离的,无法读取。这种情况下,只有postMessage可用。
立即学习“前端免费学习笔记(深入)”;
const win = window.open('https://b.com/b.html'); win.postMessage(data, 'https://b.com');window.addEventListener('message', e => { if (e.origin === 'https://a.com') { /* 处理 e.data */ } });e.origin,不能只看e.data,否则任何网站都能向你的页面发送消息。postMessage是异步的,A页面发送后不能假设B页面会立刻收到。同时,B页面也要做好防护,避免消息被多次触发(例如用户连续点击两次按钮)。说到底,真正重要的是场景匹配:传个简单ID就用URL,传整个表单数据优先考虑sessionStorage,而跨域协作没有捷径——postMessage的发送和接收逻辑必须双方都实现,缺了任何一端,通信就会卡住。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述