百度小程序需在manifest.json中显式声明scope.writeclipboard权限,且setclipboarddata必须在用户手势同步上下文中调用,避免异步打断;平台判断应使用typeof swan !== 'undefined'而非getsysteminfosync().platform;中文内容需清洗换行符、全角空格及零宽字符。

百度小程序 manifest.json 缺少剪贴板权限声明
百度小程序调用 uni.setClipboardData 静默失败,最常见原因是 manifest.json 里没配权限。它不像微信那样默认放开,必须显式申请 scope.writeClipboard 才能写入。
在项目根目录 manifest.json 的 "mp-baidu" 节点下添加:
{
"mp-baidu": {
"permission": {
"scope.writeClipboard": {
"desc": "用于复制验证码、链接等内容"
}
}
}
}
改完必须重新编译——热更新不生效,真机调试前务必确认构建产物已包含该字段。
百度小程序真机点击无响应:触发时机被异步打断
即使权限配了,uni.setClipboardData 在百度小程序里仍要求「用户手势同步上下文」。一旦中间穿插了 await、setTimeout 或 Promise 链,就会丢掉这个上下文,返回 fail no permission。
- ❌ 错误写法:
async handleClick() { const txt = await fetchText(); uni.setClipboardData({ data: txt }); } - ✅ 正确写法:先同步拿到文本(比如从
data或props直接取),再立刻调用:uni.setClipboardData({ data: this.copyText }) - 若必须异步获取内容,用
setTimeout(() => { uni.setClipboardData(...) }, 0)强制回到宏任务队列,但成功率不稳定;更稳妥的是把复制按钮和内容获取解耦,让用户点两次(第一次加载,第二次复制)
H5 和百度小程序混用时 fallback 判断失效
很多人写平台判断时用 uni.getSystemInfoSync().platform === 'mp-baidu',但在百度小程序的开发工具里,这个值可能是 'h5' 或 'mp',导致误走 H5 分支而失败。
百度热榜监控 | Baidu Hot Topics Monitor. 获取百度热搜榜、搜索趋势、关键词热度 | Get Baidu trending searches, trends, keyword popularity. 触发词:百度、热搜、baidu.
应优先用运行时环境标识:
- 判断是否为百度小程序:
typeof swan !== 'undefined'(百度小程序全局有swan对象) - 判断是否为 H5:
process.env.UNI_PLATFORM === 'h5'(编译期变量,更可靠) - 别依赖
uni.getSystemInfoSync()的platform字段做分支,它在百度端不可靠
复制中文乱码或粘贴后多空行
百度小程序对 data 参数的字符串处理较敏感,如果传入的是带换行符、全角空格或 HTML 实体(如 )的文本,会直接原样写入剪贴板,粘贴到微信/备忘录里就显示异常。
安全做法是清洗后再传:
- 去掉首尾空白:
text.trim() - 替换全角空格:
text.replace(/[\u3000]/g, ' ') - 移除零宽字符:
text.replace(/[\u200b-\u200f\u202a-\u202f]/g, '') - 避免传
innerHTML或富文本节点内容,一律走innerText或正则提取纯文本
百度小程序不报错,但粘贴效果差——这点容易被忽略,测试时得真机长按粘贴验证,不能只看控制台有没有 success 回调。










