uni-app 不支持清空系统剪贴板,所有平台均受限于原生安全策略;只能通过覆盖写入无害占位符模拟清空,不可写空字符串或 null,且需注意平台差异与用户提示影响。

uni-app 没有提供清空系统剪贴板的 API,所有平台都不支持直接清除剪贴板内容。你调用 uni.setClipboardData 只能覆盖写入,无法“清空”或“擦除”——这不是 bug,是各端原生系统的安全限制。
为什么 uni.setClipboardData({ data: '' }) 不等于清空
往剪贴板写空字符串,只是把当前内容替换成空字符串,它依然算一次有效写入:
- iOS 会保留这个空字符串,下次
uni.getClipboardData仍能读到""(不是null或undefined) - Android 部分定制系统(如 MIUI、ColorOS)在 App 后台超过 2 分钟后自动清空,但这是系统行为,前端无法触发或感知
- 鸿蒙目前也不开放清空能力,
setClipboardData的data字段为必填,不接受null或省略
实际能做的“类清空”操作只有覆盖
如果你的目标是让后续读取失败或返回无意义值,只能用一个无害占位符覆盖:
- 写入一个固定、无业务含义的字符串,比如
"clipboard_cleared_at_20260805" - 避免写空字符串,某些 Android 厂商 ROM 对
data: ""处理异常,可能触发静默失败或 toast 异常 - 若需验证是否“已覆盖”,必须主动再调一次
uni.getClipboardData检查返回值,不能依赖回调或状态标记
注意平台差异和副作用
覆盖剪贴板会触发系统级提示(除非显式禁用),且影响用户真实粘贴流:
-
uni.setClipboardData({ data: 'xxx', showToast: false })可关闭默认 toast,但 iOS 17+ 仍可能在控制中心显示最近复制记录 - 频繁调用(如轮询中反复覆盖)在 iOS 上可能被系统限频,连续两次调用间隔建议 ≥300ms
- H5 端走的是
navigator.clipboard.writeText(),同样不支持清空,且需要用户手势触发上下文(如 click 事件内),否则直接报NotAllowedError
真正需要“清空”的场景(如金融类 App 登出时防止敏感信息残留),得靠产品设计规避:不要把 token、验证码等写进剪贴板;登出时主动提示用户“请手动清空系统剪贴板”,而不是试图用代码实现它。











