uni.setClipboardData的showToast参数仅App 3.2.13+及鸿蒙支持,设为false可关闭系统toast并自定义提示;微信/支付宝小程序不识别该参数,原生提示不可禁用,H5端无系统toast。

uni.setClipboardData 的 showToast 参数控制提示
uni-app 的 uni.setClipboardData 在 App 和小程序端默认会弹系统级 toast(如“已复制”),这个提示无法关闭,但可以通过 showToast: false 关闭它——注意:该参数仅从 App 3.2.13+ 和鸿蒙平台开始支持,微信/支付宝小程序不识别此字段,仍会显示原生提示。
如果你的目标是完全隐藏所有提示并自定义反馈,必须分平台处理:
- App 端(含鸿蒙):加
showToast: false,再调用uni.showToast显示自己的提示 - 微信小程序:
showToast: false无效,原生提示不可禁用;唯一办法是避免触发系统提示——目前无公开 API 可屏蔽,只能接受它存在 - 支付宝小程序:同微信,不支持
showToast: false,原生提示固定出现
微信小程序里怎么绕过“已复制”弹窗
微信官方未提供禁用剪贴板成功提示的接口,wx.setClipboardData 的 success 回调里调用 wx.hideLoading() 是常见误传——它只对 wx.showLoading 有效,对剪贴板提示无效。
实测确认:无论加不加任何额外调用,微信真机环境下只要 wx.setClipboardData 成功,必定弹出“已复制” toast,且无法拦截、覆盖或延迟消失。这是微信客户端强制行为,不是 uni-app 封装层的问题。
所以如果你的产品设计要求“零提示”,在微信小程序中只能接受这个限制,或改用视觉反馈(如按钮变色、图标切换)替代 toast。
H5 端没有自带提示,但要注意权限和上下文
H5 不走 uni.setClipboardData,而是用 navigator.clipboard.writeText,它本身就不弹任何 toast——所以你看到的“无提示”其实是正常行为,不是被取消了。
但这里容易踩坑的是:如果 H5 页面没跑在 HTTPS 或 localhost 下,navigator.clipboard 会直接抛 NotAllowedError,连失败回调都不触发;用户点击后静默无反应,容易误以为“提示被取消了”。
判断是否可用的最小验证逻辑:
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText('test')
} else {
// fallback 到 execCommand
}
为什么有些 App 端还是弹了两次提示
典型原因是:你在 success 回调里又调了一次 uni.showToast,而平台本身又弹了一次系统 toast,结果叠加显示。
检查你的代码是否同时满足以下两个条件:
- 没传
showToast: false - 又在 success 里写了
uni.showToast({ title: '已复制' })
这时候就会出现双 toast。解决方法只有二选一:要么加 showToast: false + 自定义 uni.showToast,要么干脆不调第二次,依赖系统提示。
鸿蒙和较新版本的 uni-app App 基础库已稳定支持 showToast: false,但旧版 Android 打包的 App 可能忽略该参数——建议打包时确认基础库版本不低于 3.2.13。











