uni.hidesharemenu()必须在onload中调用才生效,因微信小程序分享控制是“一次性声明”机制,onready或之后调用无效;h5需用weixinjsbridge并监听就绪事件;朋友圈单页模式(scene=1154)须在onsharetimeline中return null。

直接调用 uni.hideShareMenu() 即可隐藏右上角分享菜单,但必须在页面 onLoad 中调用,且不能晚于 onShow 初期——延迟到 onReady 或用户点击后才执行,就完全无效。
为什么 uni.hideShareMenu() 在 onLoad 里才管用
微信小程序对分享菜单的控制是“一次性声明”机制:框架只在页面初始化早期读取一次状态。一旦页面渲染完成或生命周期推进到 onReady,再调用隐藏 API 就会被忽略。
-
onLoad是最稳妥的调用时机,此时页面实例已创建、但 UI 尚未渲染完毕 -
onShow理论上也可行,但若页面从后台切回时触发多次(如 tab 切换),存在竞态风险 -
onReady或mounted(Vue3)已错过窗口期,调用无任何效果,控制台也不会报错 - 不能放在
onShareAppMessage里——那是响应分享动作,不是控制菜单显隐
H5 环境要用 WeixinJSBridge,且必须等就绪
uni-app 的 uni.hideShareMenu() 在 H5(微信内置浏览器)下不生效,必须走微信 JS-SDK 桥接。但 WeixinJSBridge 不是全局立即可用的对象。
公众号运营:文章发布至草稿、样式封面、评论与用户管理、数据统计等。用户要求将 Markdown 发送到公众号草稿、查看阅读量统计或类似后台操作时,使用本技能。
- 直接写
WeixinJSBridge.call('hideOptionMenu')会报ReferenceError: WeixinJSBridge is not defined - 必须监听
document.addEventListener('WeixinJSBridgeReady', ...),或轮询typeof WeixinJSBridge !== 'undefined' - 部分安卓微信版本还需额外调用
WeixinJSBridge.call('hideToolbar')才能隐藏底部工具栏 - 建议统一放到
App.vue的onLaunch+ 全局路由守卫中,避免每个页面重复判断
朋友圈单页模式(scene=1154)要单独处理 onShareTimeline
从微信朋友圈点进来的页面,顶部仍显示「分享到朋友圈」按钮,但点击会触发 onShareTimeline 生命周期——此时仅隐藏菜单不够,得让它点下去没反应。
- 在页面级
onShareTimeline函数内,检测uni.getLaunchOptionsSync()?.scene === 1154 - 满足条件时直接
return null,不要调用任何 API 或返回对象 - 这个逻辑不能放
onLoad,因为onShareTimeline是独立触发的异步回调 - 务必加
#ifdef MP-WEIXIN条件编译,避免其他平台报错
安卓「复制链接」浮层无法拦截,这是系统级行为
即使成功隐藏了分享菜单,安卓微信用户仍可能通过长按页面空白处唤出「复制链接」浮层——该短链仍可跳转到你的小程序。
-
uni.hideShareMenu()和WeixinJSBridge都无法阻止这个行为 - 这是微信客户端在系统层提供的快捷入口,JS 无权限干预
- 如果业务强要求禁用,只能在分享卡片内容里做限制(如设置
isPrivateMessage: true),但这不影响复制本身 - 需提前和产品确认:是否接受“能复制但无法二次转发”的折中方案
真正容易被忽略的是调用时机与平台差异的组合问题:比如在 onLoad 里写了 uni.hideShareMenu(),却忘了 H5 下要补 WeixinJSBridge,又或者在朋友圈场景下漏掉了 onShareTimeline 的 return null —— 这三者缺一不可,且各自生效范围互不重叠。










