uni.hidesharemenu()必须在onload第一行调用才生效,h5需用weixinjsbridge,朋友圈单页模式须在onsharetimeline中return null拦截。

uni.hideShareMenu() 必须在 onLoad 里调用才生效
页面刚加载时没隐藏,后续就再也藏不住了。微信小程序的分享菜单控制是“一次性”的,onReady、onShow 甚至用户点击后才调用 uni.hideShareMenu() 都无效。真机上会看到按钮一闪而过又恢复,或者干脆没反应。
正确做法是:在页面 onLoad 生命周期第一行就执行,别等数据请求回来、别包装在 setTimeout 里、也别放在条件判断后面。
-
uni.hideShareMenu()会同时隐藏「发送给朋友」和「分享到朋友圈」两个按钮(基础库 ≥ 2.6.0) - 如果要兼容老版本基础库,可改用
uni.hideShareTimeline()单独关朋友圈入口 - 不能写成
uni.hideShareMenu({ menus: ['shareTimeline'] })—— 这个参数形式是微信原生 API 的,uni-app 当前不支持
H5 环境要用 WeixinJSBridge.call('hideOptionMenu')
uni-app 的 uni.hideShareMenu() 在 H5(微信公众号/H5 页面)里完全不生效。直接调会静默失败,控制台也不报错,容易误以为“已经关掉了”。
必须依赖微信 JS-SDK 的桥接机制,且必须等 WeixinJSBridge 就绪:
- 不能裸写
WeixinJSBridge.call('hideOptionMenu'),否则报undefined - 得监听
document.addEventListener('WeixinJSBridgeReady', ...)或主动轮询typeof WeixinJSBridge !== 'undefined' - 部分安卓微信版本还需额外加一句
WeixinJSBridge.call('hideToolbar')才能干掉底部工具栏 - 建议统一放在
App.vue的onLaunch+ 全局路由守卫中,避免每个页面重复写
朋友圈单页模式(scene=1154)下 onShareTimeline 必须 return null
从微信朋友圈卡片点进来的页面,顶部仍显示分享按钮——这不是 bug,是“单页模式”特性。此时 uni.hideShareMenu() 已经不起作用,因为菜单渲染逻辑不同。
真正有效的拦截方式,是在页面级定义 onShareTimeline,并在里面判断场景:
- 必须写在具体页面的
export default中,和data、onLoad平级;混入或全局注册都无效 - 检测
uni.getLaunchOptionsSync().scene === 1154,满足则直接return null - 这个判断不能放
onLoad里做,因为onShareTimeline是独立触发的生命周期 - 记得加
#ifdef MP-WEIXIN条件编译,避免其他平台报错
安卓长按“复制链接”无法通过 JS 拦截
即使你把右上角菜单全关了,安卓微信用户仍可能长按页面空白处唤出「复制链接」浮层。这个短链依然能跳转到你的小程序,且 JS 层完全无权限阻止。
这是系统级行为,不是 uni-app 或微信 SDK 的遗漏,2026 年所有已知版本均如此。如果你的业务对传播路径有强管控需求(比如限时活动页),得靠后端校验来源 scene 或 query 参数,而不是前端隐藏按钮。
别在 onShareAppMessage 里 return null 试图禁用——那只是控制分享内容,菜单本身还是亮的。











