只有微信小程序(mp-weixin)支持监听右上角复制链接行为,通过 wx.oncopyurl 在页面 onload/onshow 中注册、onunload 中卸载,回调返回 query 供微信拼入链接;app 和 h5 无等效 api,不可监听系统级复制菜单。

微信小程序里才能监听“右上角复制链接”行为,H5 和 App 端没有等效 API,别在非 MP-WEIXIN 环境下白费劲。
只有 wx.onCopyUrl 能捕获右上角复制操作
这是微信原生提供的、uni-app 封装后保留的唯一入口,仅限微信小程序(#ifdef MP-WEIXIN)。它不是 DOM click 事件,也不是 uni.$on 可替代的——必须用这个原生钩子。
- 必须在页面
onLoad或onShow中注册,卸载时(onUnload)要调用wx.offCopyUrl,否则重复注册导致回调执行多次 - 回调函数里可以返回
query字符串,微信会把它拼进复制的链接末尾(如?a=1&b=2) - 不能直接拿到用户当前页面 URL,得自己拼:
getCurrentPages()[0].route+?+query - 注意:该回调不传 event 对象,只给你一个修改 query 的机会;实际复制动作由微信完成,你无法阻止或替换剪贴板内容
onShareAppMessage 和 onShareTimeline 不是复制监听
这两个生命周期只响应「转发」动作(聊天/朋友圈),和「复制链接」完全无关。有人误以为点三次右上角菜单就会触发它们,其实不会——复制是独立通道。
-
onShareAppMessage:只在用户点「转发给朋友」或页面内<button open-type="share"></button>时触发 -
onShareTimeline:只在点「分享到朋友圈」时触发(需基础库 2.11.3+) - 它们返回的
path和query仅影响转发卡片的跳转地址,对复制链接无任何作用
App 和 H5 端根本没法监听“复制按钮”
uni-app 没有提供、平台也不开放这类能力:Android/iOS 原生系统不向 WebView 或 App 容器暴露「用户点击了系统级复制菜单」这一事件;H5 更是连菜单都不存在。
- App 端想做类似效果?只能放弃“监听”,改用主动引导:在页面加一个显式「复制链接」按钮,用
uni.setClipboardData写死内容 - H5 端同理,且要注意
navigator.clipboard.writeText需用户手势触发(比如必须在@click回调里调用),不能 onload 自动写 - 别试图用
document.addEventListener('copy')—— 它监听的是Ctrl+C或document.execCommand('copy'),和右上角菜单毫无关系
最容易被忽略的一点:很多人把 wx.onCopyUrl 写在 App.vue 或组件里,结果完全不触发。它必须写在具体页面的 onLoad 中,且只对该页面生效——因为微信的复制菜单是按页面上下文弹出的,不是全局事件。











