纯HTML+JS裂变页通过URL参数(如ref=abc123)提取邀请ID并存入localStorage,用于后续行为上报;需配合后端校验与归因,前端仅作线索传递,不可依赖其渲染关键提示或替代服务端逻辑。
纯静态 HTML 页无法自动记录谁邀请了谁,必须配合后端或第三方服务。但你可以用 URL 参数 + localStorage 在前端完成基础关系绑定和展示逻辑,适合 MVP 验证或轻量活动。
核心思路:用户点击分享链接时带上 ref=abc123,落地页读取该参数存入 localStorage;后续所有行为(如领券、提交表单)都附带这个 ref 上报给后端。
https://example.com/act?ref=uid789,其中 uid789 是邀请人 IDnew URLSearchParams(window.location.search).get('ref') 提取参数localStorage.setItem('referrer', ref),避免刷新丢失localStorage,需 fallback 到 sessionStorage 或直接丢弃(不强依赖)微信内置浏览器对 URL 参数有“净化”行为,尤其在从聊天窗口跳转、公众号菜单、小程序转发等路径下,location.search 可能被清空或重写。
这不是 HTML 本身的问题,而是微信的限制策略。你不能靠前端完全规避,但可以降低影响:
立即学习“前端免费学习笔记(深入)”;
JS-SDK 的 updateAppMessageShareData 和 updateTimelineShareData,把 ref 写进 shareUrl 字段(不是靠用户手动复制链接)ref,可尝试从 document.referrer 解析(仅限同域,且微信常为空)https://a.co/r/xyz),由服务端 302 跳转并注入 ref 参数,绕过微信前端截断localStorage 存 ref 会被用户清除怎么办会。而且清除后,后续行为就丢失邀请关系。但这是用户主动行为,你无法阻止,只能减少依赖层级。
关键不是“存不存”,而是“什么时候用”:
localStorage 读一次 referrer,拼进请求体发给后端ref 是否真实存在、是否未被使用过、是否在有效期内,而不是前端传啥就认啥ref,实现关系归一document.cookie 替代 localStorage
可以,但没必要,且更麻烦。
cookie 在跨域、HTTPS 混合、Safari ITP 等场景下失效更频繁;而裂变页多数是独立域名或子路径,localStorage 范围更可控。
cookie 需要设置 domain 和 path,稍有不慎就写不进或读不出localStorage 容量更大(通常 5–10MB),存一个字符串绰绰有余localStorage 存敏感信息(如用户手机号),它可被任意脚本读取最易被忽略的一点:裂变效果最终靠后端数据归因,前端只是“尽力而为”地传递线索。别在 HTML 里写死逻辑,比如用 if (ref) { showInviteBanner() } 这类判断——它会让运营无法动态开关入口,也不利于 AB 测试。把决策权交给后端返回的 JSON 配置更可靠。