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

    https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write ,这里提示部分系统是不支持多个 ClipboardItem 。
    rogerer
        7
    rogerer  
       77 天前
    @rogerer QQ 本身的消息框是图文混排的,所以写入的时候会是一个 HTML 写入进去,然后粘贴的时候再来解析。这和很多在线文档的实现方式是一致的,而不需要真的写入多个 minetype 为 text/image 的 ClipboardItem 到 Clipboard 里。
    co2In
        8
    co2In  
    OP
       77 天前
    @rogerer 感谢大佬,有思路了,不过这样写入的话,只能在自己的粘贴里面才能解析成功是这样吧
    zsh2517
        9
    zsh2517  
       77 天前
    之前写过一个读取剪贴板的东西: 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
       77 天前
    @zsh2517 好的,谢谢大佬
    rogerer
        11
    rogerer  
       76 天前
    @co2In 也不是,各个产品都是根据自己的需求去解析 HTML 代码。
    unhappy224
        12
    unhappy224  
       76 天前
    大部分富文本的地方都是能解析 html 的,所以如果实在是要多张图片,可以转成 html 用 base64 传
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:27 · PVG 00:27 · LAX 09:27 · JFK 12:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.