我最初的目标是从剪贴板上粘贴一张图片。但是我在粘贴事件上遇到了麻烦。
在我重现问题的JSFiddle中,HTML只包含一个div:
<div style="width: 200px; height: 200px; background: grey" id="pasteTarget" > </div>JavaScript首先将我的函数handlePaste()绑定到paste事件。
window.onload = function() {
//adding paste event listener on the div
document.getElementById("pasteTarget").
addEventListener("paste", handlePaste);
};此函数应在用户按下Ctrl+V或在浏览器菜单中选择"paste“时调用。
function handlePaste(e) {
alert("I'm in handlePaste");
for (var i = 0 ; i < e.clipboardData.items.length ; i++) {
var item = e.clipboardData.items[i];
console.log("Item: " + item.type);
alert(item.type);
}
}重要:该函数访问e.clipboardData以获取剪贴板的内容。例如,如果按PrtScrn键,然后按Ctrl+V,则会向handlePaste方法发送一个打印屏幕图像。最后一个警报在工作正常时显示"image/png“。
Chrome v37: JsFiddle运行良好。Firefox v32:未调用handlePaste()方法,未弹出第一个警报。
jsFiddle代码:http://jsfiddle.net/demeylau/ke44bufm/1/
发布于 2014-10-07 16:32:13
据我所知,您必须为每个浏览器代理单独处理粘贴。Joshua Gross在本文中介绍了paste事件的许多错综复杂的内容:Paste Wasteland
Firefox喜欢更迟钝,但通过将剪贴板数据视为Blob,可以将图像数据作为文件读取。(参见Gross文章中的postscript )这是浏览器中未解决的遗留代码,以略有不同的方式处理操作系统事件,并简洁地总结了为什么我们在WebAPI等东西中标准化了大多数新功能。我希望这能帮到你。
https://stackoverflow.com/questions/26096920
复制相似问题