可以使用粘贴事件处理复制操作:
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,第二个参数也应该是字符串。
如何根据规范将数据放入剪贴板(没有特定于浏览器的功能)?
答案 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(),例如告诉用户右键单击图像并选择"复制到剪贴板"手动