鸿蒙平台需配置ohos.permission.READ_PASTEBOARD权限,iOS首次必弹授权,H5无法静默读取,Android部分机型静默拦截,真正静默仅存于鸿蒙配权后及部分原生Android环境。

鸿蒙平台必须配 ohos.permission.READ_PASTEBOARD 权限
不加这个权限,uni.getClipboardData 在鸿蒙上会静默失败,连 fail 回调都不触发。配置位置在 harmony-configs/entry/src/main/module.json5 里,不是 manifest.json 或其他地方:
{"module":{"requestPermissions":[{"name":"ohos.permission.READ_PASTEBOARD","reason":"$string:clipboard_reason","usedScene":{"when":"inuse"}}]}}
注意:reason 必须是字符串资源引用($string:xxx),不能写死中文;usedScene.when 值只能是 "inuse",写成 "always" 或空字符串会导致编译失败。
iOS 上无法真正“静默”,首次必弹授权
iOS 系统层强制要求:只要 App 第一次读剪贴板,不管你怎么封装、怎么调用,都会弹系统授权框。这不是 uni-app 能绕过的限制。
- 用户点“不允许”后,后续所有
uni.getClipboardData调用都直接进fail,且不会再次提示 - 用户点“允许”后,之后调用就不会再弹——但仅限同一 App 生命周期内;App 被杀后台重进,仍可能再弹(iOS 行为不一致)
- 别试图用
setTimeout或异步延迟规避弹窗,iOS 会识别为非用户直接触发,直接拒绝
H5 平台根本做不到静默读取
uni.getClipboardData 在 H5 上始终返回空或报错,浏览器策略禁止页面静默读取剪贴板。这是安全底线,任何 JS 方案都无法突破。
-
navigator.clipboard.readText()同样需要用户手势触发 + HTTPS + 页面焦点,且多数浏览器(尤其是 Safari)只允许点击后 1 秒内调用 - 所谓“自动粘贴”实际是伪需求:你最多能做的是点按钮 → 读 → 把内容塞进 input →
focus()+select(),然后让用户按 Ctrl+V - 如果业务强依赖读剪贴板,H5 端必须降级为手动粘贴提示,比如“请长按输入框选择粘贴”
Android 部分机型会静默拦截
华为、小米、OPPO 等定制系统会在后台或 WebView 容器中主动屏蔽剪贴板读取,即使你已声明权限,uni.getClipboardData 也可能返回空字符串或直接失败。
- 不要在
onLoad或onShow里直接读——必须绑定到用户点击事件的第一层,比如@tap="handlePaste"函数体开头就调 - 读出来内容为空时,先检查
res.data.replace(/[\u200b-\u200f\u202a-\u202f]/g, '').trim().length,微信复制常带零宽字符 - 部分机型(如 EMUI 12)要求 App 处于前台且输入法活跃,否则读不到——这意味着切后台再回来,大概率读不到


















