微信小程序中无法关闭setclipboarddata触发的默认toast,唯一可行方案是在wx.setclipboarddata的success回调中立即调用wx.hidetoast()再显示自定义toast。

uni-app 复制成功后怎么关掉默认 toast?
微信小程序调用 uni.setClipboardData 或原生 wx.setClipboardData 时,系统会自动弹出「已复制」提示,无法通过 uni-app API 关闭。这不是 bug,是微信客户端的强制行为,且没有开关配置项。
为什么 uni.showToast 和默认提示会叠在一起?
常见错误是:在 success 回调里直接调 uni.showToast,结果用户看到两个 toast(微信原生 + 你自定义的)。这是因为微信的提示由 native 层触发,不走 JS 控制流,你无法拦截或延迟它。
- 微信原生提示在
setClipboardData调用后立即渲染,无 delay、不可取消 -
uni.showToast是异步 JS 调用,哪怕加了setTimeout(0)也大概率晚于原生提示 - 部分安卓厂商 WebView 甚至会把两个 toast 合并成一个带闪烁的异常效果
真正可行的绕过方式只有这一种
放弃“覆盖”或“隐藏”原生提示,改为完全不用 uni.setClipboardData,改用 wx.setClipboardData + wx.hideToast 组合——但注意:这个方案仅限微信小程序,且必须在 success 回调中立刻调用 wx.hideToast(不是 uni.hideToast)。
-
wx.hideToast()可以关闭当前正在显示的微信原生 toast,包括那个「已复制」提示 - 必须写在
wx.setClipboardData的success里,不能用 Promise 写法(wx.setClipboardData().then不会触发 success 回调) - 示例写法:
wx.setClipboardData({ data: 'hello' , success: () => { wx.hideToast(); uni.showToast({ title: '复制成功', icon: 'none' }); } }); - H5 / App 端不存在该问题,它们本就不弹原生 toast,可自由控制
uni.showToast
别踩的坑:误以为 uni.hideToast 或配置能关掉
uni.hideToast 对微信原生复制提示完全无效;manifest.json 里也没有任何字段能禁用它;iOS/Android App 端更不会出现这个提示——所以这个问题本质是「微信小程序平台特有约束」,不是你的代码没写对。
如果项目要多端统一交互体验,建议直接放弃自定义 toast,或把提示逻辑移到复制前(例如按钮文字从「复制」变成「已复制」),避免和原生 toast 冲突。微信这个限制至今没开放解禁入口,2026 年仍如此。











