鸿蒙系统中uni-app剪贴板读取必须申请ohos.permission.read_pasteboard权限并调用@ohos.clipboard.getpastedata(),文本在primarytext字段;写入可用uni.setclipboarddata但受内容过滤限制,且模拟器需手动开启剪贴板服务。

鸿蒙系统上 uni-app 的剪贴板操作不能直接用 uni.setClipboardData 或 uni.getClipboardData,必须走 HarmonyOS 原生权限 + API 调用路径,否则会静默失败或报错 permission denied。
必须声明 ohos.permission.READ_PASTEBOARD 权限
鸿蒙对剪贴板读取有严格权限管控,即使只是「读」也要显式申请。仅在 manifest 中配置不够,需在 harmony-configs/entry/src/main/module.json5 中补充完整权限声明:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.READ_PASTEBOARD",
"reason": "$string:clipboard_reason",
"usedScene": {
"when": "inuse"
}
}
]
}
}
-
$string:clipboard_reason需在resources/base/element/string.json中定义对应文案,否则编译可能警告 - 写入剪贴板(
set)不需要额外权限,但读取(get)必须声明READ_PASTEBOARD - 该权限属于「敏感权限」,首次调用
getClipboardData时会触发系统弹窗,用户拒绝后无法重试(需引导去设置页手动开启)
使用 @ohos.clipboard 替代 uni.getClipboardData
uni-app 在鸿蒙平台不透传剪贴板底层实现,必须通过条件编译调用原生模块:
// #ifdef HARMONYOS
import clipboard from '@ohos.clipboard';
// #endif
function getClipboardText() {
// #ifdef HARMONYOS
try {
const pasteData = clipboard.getPasteData();
if (pasteData && pasteData.primaryText) {
return pasteData.primaryText;
}
} catch (e) {
console.error('get clipboard failed:', e);
}
// #endif
// #ifndef HARMONYOS
return uni.getClipboardData({}).then(res => res.data);
// #endif
}
-
clipboard.getPasteData()返回的是PasteData对象,文本内容在.primaryText字段,不是.text - 鸿蒙 API 不支持异步 Promise,直接返回值或抛异常,需用
try/catch捕获权限拒绝等错误 - 不要混用
uni.setClipboardData和@ohos.clipboard.setPasteData,二者数据格式不兼容;写入建议统一用uni.setClipboardData(它在鸿蒙底层已适配)
setClipboardData 在鸿蒙下仍可用但有隐性限制
uni.setClipboardData 在鸿蒙环境能正常写入,但要注意:
- 写入内容会被鸿蒙系统自动过滤掉不可见控制字符(如
\u202E反向文本),部分富文本粘贴可能被截断 - 若之前用户拒绝过
READ_PASTEBOARD,虽然写入不受影响,但后续任何读取逻辑都会失败,且无明确错误提示 - 鸿蒙系统剪贴板生命周期较短,后台超过 30 秒后内容可能被清空,不适合做临时状态缓存
最易被忽略的点:鸿蒙模拟器默认关闭剪贴板服务,真机调试前务必确认「设置 → 安全 → 剪贴板」已启用,否则所有 API 调用都返回空或异常。











