“not supported”表示当前环境不支持uni.setclipboarddata,h5端官方未实现该api,需手动降级;小程序真机报此错多因manifest.json未配置scope.writeclipboard权限或微信公众平台隐私声明未勾选剪贴板。

uni.setClipboardData 报错 “not supported” 的真实含义
这个错误不是 API 写错了,而是当前运行环境根本不支持 uni.setClipboardData——最常见于 H5 端。uni-app 官方明确不实现该 API 的 H5 适配,调用后直接返回 fail: "not supported",且无任何 warning 或 fallback 提示。
H5 端必须手动降级,不能依赖 uni 接口
H5 下复制必须绕过 uni.setClipboardData,自己实现兼容逻辑。浏览器策略严格,三个条件缺一不可:
- 必须运行在 HTTPS 或
localhost环境下;HTTP 页面调用navigator.clipboard.writeText会直接抛NotAllowedError - 必须由用户手势(
click/tap)同步触发,不能在setTimeout、Promise.then、this.$nextTick里执行 - 旧版安卓 WebView(如 QQ 浏览器 10.7 以下)不支持
navigator.clipboard,需 fallback 到document.execCommand('copy'),且要手动创建并聚焦<input>
推荐写法:
const copyToClipboard = async (text) => {
if (!text) return;
try {
if (uni.getSystemInfoSync().platform === 'h5') {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(text);
} else {
const input = document.createElement('input');
input.value = text;
input.style.position = 'absolute';
input.style.left = '-9999px';
document.body.appendChild(input);
input.select();
document.execCommand('copy');
document.body.removeChild(input);
}
} else {
await uni.setClipboardData({ data: text });
}
} catch (err) {
console.error('复制失败', err);
}
};
小程序真机报 “not supported” 多因权限未声明
微信小程序基础库 ≥2.21.0 后,uni.setClipboardData 实际调用的是 wx.setClipboardData,而后者要求显式申请权限。没配置就会静默报 not supported 或 fail api scope is not declared。
- 在
manifest.json的mp-weixin节点下加:"permission": { "scope.writeClipboard": { "desc": "用于复制内容" } } - 同时去微信公众平台 → 账号设置 → 服务内容声明 → 用户隐私保护指引,勾选「剪贴板」信息类型
- 注意:旧项目若曾加过
"__usePrivacyCheck__": true,需删掉,否则反而阻断权限生效
App 端 iOS 静默失败,常因模块未启用
iOS App 中 uni.setClipboardData 不报错也不提示,但就是不工作——大概率是 manifest.json 里没勾选「剪贴板」模块。
- 打开
manifest.json→ 「App 模块配置」→ 「iOS 设置」→ 勾选「剪贴板」 - Android 端同理,在「模块权限配置」中启用
clipboard模块 - 改完必须重新打包,热更新无效
最容易被忽略的是:H5 降级逻辑里漏判 window.isSecureContext,或小程序后台隐私协议没同步更新,这两处一出问题,表现都是“点了没反应”,连控制台都安静得像没调用过。











