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

时间:2014-11-29 19:40:05

标签: javascript javascript-events clipboard w3c

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

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

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

var items = event.clipboardData;

此对象有一个.setData方法,允许您在剪贴板中添加数据。不幸的是,我似乎无法弄清楚它是如何运作的。 Documentation is broken(如果您点击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,第二个参数也应该是字符串。

如何根据规范将数据放入剪贴板(没有特定于浏览器的功能)?

1 个答案:

答案 0 :(得分:2)

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

首先,抱歉链接断了。它实际上是在TR官方工作:

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

但不是在编辑草案中,因为有些混乱的过程原因("官方" HTML5规范丢弃了Clipboard API规范所依赖的内容,硬编码指向特定历史快照的链接官方的HTML5规范似乎是一个坏主意 - 所以我需要决定是否只是简单地链接到WHATWG规范或等到一个低位的HTML6-bring-DnD-back-in情况发生。)

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

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