关于 js 复制粘贴问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
co2In
V2EX    Javascript

关于 js 复制粘贴问题

  •  
  •   co2In 116 天前 2533 次点击
    这是一个创建于 116 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想在浏览器里面实现复制功能,发现 navigator.clipboard.write 无法写入多张图片,问 ai 也说不能,现在有个疑问
    从 qq 这种软件复制多张图片,触发粘贴发现是一个 DataTransferItemList 类数组对象,那么既然可以粘贴,应该是可以写入的啊,求大佬解惑
    12 条回复    2025-06-18 11:08:09 +08:00
    gucheen
        1
    gucheen  
       116 天前   3
    这个问题和浏览器、操作系统设计有关
    事实上,现在的 write 方法中,虽然支持一个数组,但是大部分实现都只会处理第一个 ClipboardItem
    gucheen
        2
    gucheen  
       116 天前   1
    如过你去翻标准定义,会发现有这么一句
    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.
    co2In
        3
    co2In  
    OP
       116 天前
    @gucheen 感谢大佬解惑
    xiaoming1992
        4
    xiaoming1992  
       116 天前
    我看 mdn navigator.clipboard.write 接收参数是一个 ClipboardItem[],我尝试了一下,chrome 目前并不支持多个 ClipboardItem. 所以可能 QQ 是 app, 他支持多写入,浏览器是受限环境,仅支持多读,不支持多写?
    co2In
        5
    co2In  
    OP
       116 天前
    @xiaoming1992 可能是这样,只能写入第一个 ClipboardItem
    rogerer
        6
    rogerer  
       116 天前
    QQ 应该是全程当 HTML 处理吧?这样本质上就是一个 ClipboardItem 。

    https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write ,这里提示部分系统是不支持多个 ClipboardItem 。
    rogerer
        7
    rogerer  
       116 天前
    @rogerer QQ 本身的消息框是图文混排的,所以写入的时候会是一个 HTML 写入进去,然后粘贴的时候再来解析。这和很多在线文档的实现方式是一致的,而不需要真的写入多个 minetype 为 text/image 的 ClipboardItem 到 Clipboard 里。
    co2In
        8
    co2In  
    OP
       116 天前
    @rogerer 感谢大佬,有思路了,不过这样写入的话,只能在自己的粘贴里面才能解析成功是这样吧
    zsh2517
        9
    zsh2517  
       116 天前
    之前写过一个读取剪贴板的东西: https://codepen.io/zsh2517/full/ZEdEdzw

    复制一段消息,然后在这里读取剪贴板,看一下真实的剪贴板数据。
    然后试着构造一个相同的结构塞进去,看看 QQ 能不能用。

    不过因为浏览器的局限性,它只能读取一些通用的格式。如果想要完整的剪贴板数据,可以 AI 用 win/mac 原生 API 写个工具。
    有些软件除了公共格式比如 text/html/image 等还会写入自己应用专有格式,以实现例如表情、at 人、回复等功能

    设置剪贴板可以参考这个有点意思的 demo (往剪贴板写入 text/html 不对应的内容,实现纯文本输入框粘贴/富文本输入框粘贴,内容不同的效果): https://codepen.io/zsh2517/full/WNqNBad
    co2In
        10
    co2In  
    OP
       116 天前
    @zsh2517 好的,谢谢大佬
    rogerer
        11
    rogerer  
       115 天前
    @co2In 也不是,各个产品都是根据自己的需求去解析 HTML 代码。
    unhappy224
        12
    unhappy224  
       115 天前
    大部分富文本的地方都是能解析 html 的,所以如果实在是要多张图片,可以转成 html 用 base64 传
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2722 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:36 PVG 19:36 LAX 04:36 JFK 07:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86