根据 W3C 的说法,我应该如何在剪贴板中放置画布

How should I, according to W3C, put a canvas in clipboard?

本文关键字:剪贴板 W3C 我应该 根据      更新时间:2023-09-26

复制操作可以使用粘贴事件来处理:

div.addEventListener("copy", function() { ... });

event是可取消的,并与其他事件信息一起提供DataTransfer对象:

var items = event.clipboardData;

此对象具有一个.setData方法,该方法应允许您在剪贴板中添加数据。不幸的是,我似乎无法弄清楚它是如何工作的。文档已损坏(如果您单击setData它会在错误的页面上导航您(。

我尝试了这样的事情:

  function copy(event) {
    var items = (event.clipboardData || event.originalEvent.clipboardData);
    items.setData("image/png", _this.editor.selection.getSelectedImage());
    event.preventDefault();
    event.cancelBubble = true;
    return false;
  }

但根据 MDN,第二个参数也应该是字符串。

如何根据规范将数据放入剪贴板(无浏览器特定功能(?

我是剪贴板API规范的编辑。

首先,对断开的链接表示歉意。它实际上在官方TR中工作:

http://www.w3.org/TR/clipboard-apis/

但不在编辑器草案中,出于一些混乱的过程原因("官方"HTML5规范删除了剪贴板API规范所依赖的内容,硬编码指向官方HTML5规范的特定历史快照的链接似乎是一个坏主意 - 所以我需要决定是简单地链接到WHATWG规范还是等到假设的HTML6带来DnD回头的情况发生(。

现在,修复此链接实际上并不能解决您的问题 - 因为即使在所谓的前沿 WHATWG 规范中,setData(( 也被指定为获取字符串。Web技术是一项正在进行的工作,您遇到了(较旧的(setData((API没有考虑的用例。API的这一部分可以追溯到最初的Microsoft实现 公平地说,JavaScript本身当时并没有真正方便的方式来处理二进制数据。

您可能想要使用的是 clipboardData.items.add(( API 传入具有相关数据和类型的 File 对象。请注意,这还没有被广泛实现,例如AFAIK,它在任何当前版本的Firefox中都不受支持。您可以检测缺少剪贴板Data.items和.items.add((,例如告诉用户右键单击图像并手动选择"复制到剪贴板"。