转发参数需在onshareappmessage中拼接完整path(含encodeuricomponent后的query),冷启动时通过onload的options获取,路径必须与实际页面路径完全一致,否则options为空。

转发参数不是分享时主动传的,而是用户点击分享卡片后,小程序冷启动或后台唤醒时,通过 onLoad 的 options 拿到的——这个逻辑和原生小程序一致,uni-app 并没有额外封装一层。
uni-app 中 onShareAppMessage 怎么正确返回路径和参数
分享时必须拼接完整路径 + query 参数,不能只写路径;path 字段值会直接被当作新页面 URL 解析,不加 ?xxx 就等于没透传。
- 必须用
path: '/pages/detail/detail?id=123&from=share'格式,不能写成path: '/pages/detail/detail', query: { id: 123 }(uni-app 的onShareAppMessage不支持对象形式的query) - 参数值要
encodeURIComponent,尤其含中文、斜杠、问号时,否则跳转失败或截断:path: '/pages/detail/detail?title=' + encodeURIComponent('订单详情/2024') - 不要在
path里重复加?或&,uni-app 不做二次解析,错一个字符就拿不到参数
冷启动时如何在目标页面拿到转发参数
用户从分享卡片进入小程序,页面首次加载走 onLoad,此时 options 才包含转发带的 query。热启动(从后台切回)不会触发 onLoad,也不会补发 options。
-
onLoad的options是唯一可靠入口,onShow里拿不到转发参数 - 如果页面用了
vue-router风格的路由(如 H5),注意:小程序平台下onLoad的options和$route.query无关,别混用 - 多级嵌套路由(比如 tabbar 页面)要注意:分享路径必须指向实际承载逻辑的页面,不能指向 tabbar 页本身,否则
options为空
为什么有时 onLoad 的 options 是空对象
常见于路径拼错、分享未触发、或调试方式不对——真机调试和微信开发者工具表现可能不一致。
- 检查控制台是否报
shareAppMessage is not a function:说明你没在页面定义onShareAppMessage方法,或它被写在了methods里(必须是页面生命周期函数,平级声明) - 真机上长按分享卡片“复制链接”,粘贴到浏览器看 URL 是否含 query:不含,就是拼接逻辑错了;含但页面收不到,大概率是路径没对齐(比如写了
/pages/detail/index,但实际页面是/pages/detail/detail) - 微信开发者工具开启“重启并打开分享面板”再试,单纯点“编译”不会触发分享流程
转发参数本质是小程序运行时注入的 URL query,uni-app 只做了桥接,没改底层机制。最容易忽略的是:分享路径必须和实际页面路径完全一致,连大小写、.vue 后缀(不写)、斜杠结尾都不能错——差一点,options 就是空的。










