不支持直接复制html代码并保持格式粘贴到微信、钉钉等目标应用,除非h5端满足https+用户手势+现代浏览器条件;app和小程序端只能复制清洗后的纯文本。

不支持直接复制 HTML 代码并保持格式粘贴到目标应用(如微信、钉钉)中,除非是 H5 端且满足严格条件;App 和小程序端只能复制清洗后的纯文本。
uni.setClipboardData 传入 HTML 字符串会怎样
直接把 <div>Hello</div> 这类字符串传给 uni.setClipboardData,结果通常是粘贴为空、乱码、或带大量换行缩进——不是 API 崩了,而是它只做字面量写入,不解析 HTML。剪贴板底层不识别标签语义,目标应用(比如微信聊天框)能否渲染 HTML 完全取决于其自身实现,且不可控。
- 微信/钉钉在某些场景下会自动解析粘贴的 HTML 字符串并渲染加粗、链接等,但这是客户端行为,非标准保证
- App 端(iOS/Android)和所有小程序端,
uni.setClipboardData底层通道仅接受纯文本,HTML 标签会被原样写入,但无格式效果 - 服务端返回的富文本内容若未清洗,常含
、<br>、零宽空格\u200B等,导致粘贴后首尾空白、段落错乱
navigator.clipboard.write 支持 text/html 吗
仅在 H5 端、HTTPS 环境、用户手势触发前提下可用,且需构造 ClipboardItem 并传入 new Blob([htmlString], { type: 'text/html' })。但兼容性极差:
- iOS Safari 需 16.4+ 才支持,旧版静默 fallback 到纯文本
- Chrome / Edge 对
text/html的处理不一致,部分版本粘贴后仍为纯文本 - 本地开发(
http://localhost)无法使用,会报NotAllowedError - App 和小程序端完全不支持
navigator.clipboard.write,调用即报错或静默失败
怎么安全地复制含 HTML 的内容
统一清洗为可预测的纯文本,再复制。不要试图“保留格式”去赌客户端解析能力。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 剔除所有标签:
text.replace(/]*>/g, '') - 归一化空白并 trim:
.replace(/[\r\n\t\s\u00A0\u200B]+/g, ' ').trim() - 如需保留段落换行,可先将
<p></p>、<div>、<code><br>替换为\n,再执行上一步 - 避免用
element.innerHTML或innerText直接取值——前者含标签,后者在不同平台对实体符(如)处理不一致 - 长文本(>10KB)在部分安卓机上会复制失败,建议截断并提示
为什么不能用 plus.clipboard 或小程序右上角「复制」绕过
这些看似高级的入口,底层仍是纯文本通道。plus.clipboard.writeText(App)、小程序自定义菜单触发的复制,都不支持富文本类型。所谓“复制 HTML”,本质还是字符串写入,没有额外格式协商机制。
真正难的不是调用哪个 API,而是接受「跨端剪贴板没有统一富文本协议」这个事实——H5 的 text/html 是特例,且受制于环境;其余平台只认纯文本。清洗逻辑必须前置,不能指望粘贴端补救。










