这个问题和浏览器、操作系统设计有关。事实上,现在的 write 方法中,虽然支持一个数组,但是大部分实现都只会处理第一个 ClipboardItem 。如过你去翻标准定义,会发现有这么一句:
If data’s size is greater than 1, and the current operating system does not support multiple native clipboard items on the system clipboard, then add data[0] to dataList, else, set dataList to data.
复制一段消息,然后在这里读取剪贴板,看一下真实的剪贴板数据。然后试着构造一个相同的结构塞进去,看看 QQ 能不能用。不过因为浏览器的局限性,它只能读取一些通用的格式。如果想要完整的剪贴板数据,可以 AI 用 win/mac 原生 API 写个工具。有些软件除了公共格式比如 text/html/image 等还会写入自己应用专有格式,以实现例如表情、at 人、回复等功能。设置剪贴板可以参考这个有点意思的 demo (往剪贴板写入 text/html 不对应的内容,实现纯文本输入框粘贴/富文本输入框粘贴,内容不同的效果): https://codepen.io/zsh2517/full/WNqNBad
QQ 本身的消息框是图文混排的,所以写入的时候会是一个 HTML 写入进去,然后粘贴的时候再来解析。这和很多在线文档的实现方式是一致的,而不需要真的写入多个 minetype 为 text/image 的 ClipboardItem 到 Clipboard 里。
https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write ,这里提示部分系统是不支持多个 ClipboardItem 。
可能是这样,只能写入第一个 ClipboardItem
If data’s size is greater than 1, and the current operating system does not support multiple native clipboard items on the system clipboard, then add data[0] to dataList, else, set dataList to data.