urlsearchparams 是最轻量、兼容性好、无需服务端的 url 查询参数处理首选方案;传对象用 sessionstorage;跨域传参唯一可靠的是 postmessage。

直接说结论:URL 查询字符串 + URLSearchParams 是最轻量、兼容性好、无需服务端的首选方案;传对象或敏感数据时,改用 sessionStorage;跨域页面间传参,唯一可靠的是 postMessage。
用 URLSearchParams 解析 query 参数最稳
常见错误现象:手动拼接 location.search 字符串,遇到中文、&、空格就解析失败;或者用正则/分割方式提取参数,name=foo&name=bar 这种多值场景直接漏掉。
使用场景:跳转链接带 ?id=123&tab=detail,目标页读取并渲染。
-
URLSearchParams自动处理编码解码、重复键、数组展开(如tags=a&tags=b→getAll('tags')) - IE11 不支持,但现代项目基本可忽略;若需兼容,加一个轻量 polyfill 或封装 fallback 函数
- 不要自己写
parseQueryString()—— 浏览器原生 API 更可靠
示例:
const params = new URLSearchParams(window.location.search);
const id = params.get('id'); // "123"
const tags = params.getAll('tags'); // ["a", "b"]
传对象别硬塞 URL,用 sessionStorage 存 JSON
常见错误现象:把整个对象 JSON.stringify(obj) 后直接拼进 URL,结果超长、乱码、被截断,还暴露敏感字段。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
使用场景:A 页面选中一个用户配置对象 { userId: 1001, permissions: ['read'], theme: 'dark' },跳转到 B 页面初始化 UI。
-
sessionStorage.setItem('pageData', JSON.stringify(obj))后跳转 - B 页面立即读取:
const data = JSON.parse(sessionStorage.getItem('pageData') || '{}');—— 必须加|| '{}'防JSON.parse(null)报错 - 读完立刻
sessionStorage.removeItem('pageData'),否则刷新页面会重复执行逻辑 - 注意:新开标签页、从书签打开、iframe 加载的页面,都拿不到上一页的
sessionStorage
跨域页面间传参只能靠 postMessage
常见错误现象:试图用 localStorage 或 URL 参数在 @#@#@#@#@#@#@#@#@#@0 和 @#@#@#@#@#@#@#@#@#@1 之间传数据,结果读不到、静默失败。
使用场景:嵌入第三方仪表盘 iframe,或 SSO 登录后跳转到合作方域名。
- 发送方必须确认目标窗口存在(如
window.open返回值),且指定精确targetOrigin(不能用'*') - 接收方必须校验
e.origin,只处理可信来源的消息 -
postMessage是异步的,A 发完不能假设 B 已收到;如需响应,得约定双向通信协议
示例(B 页面监听):
window.addEventListener('message', e => {
if (e.origin !== 'https://www.php.cn/link/e75a2d435455f0626ccf0af67216e76f') return;
console.log('received:', e.data);
});
关键点容易被忽略:URL 参数有长度限制(通常 ≤ 2048 字符),sessionStorage 在页面刷新后仍存在但新开标签页就失效,postMessage 的 origin 校验不是可选项而是安全底线。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










