【问题标题】:JavaScript paste event working fine in Chrome but not FirefoxJavaScript 粘贴事件在 Chrome 中运行良好,但在 Firefox 中运行良好
【发布时间】:2014-09-29 09:44:23
【问题描述】:

我最初的目标是从剪贴板中粘贴一张图片。但是我在获取粘贴事件时遇到了麻烦。

在我重现问题的 JSFiddle 中,HTML 仅包含一个 div:

<div style="width: 200px; height: 200px; background: grey" id="pasteTarget" > </div>

JavaScript 首先将我的函数 handlePaste() 绑定到粘贴事件。

window.onload = function() {
    //adding paste event listener on the div
    document.getElementById("pasteTarget").
        addEventListener("paste", handlePaste);
};

这个函数应该在用户按下 Ctrl+V 或在浏览器的菜单中选择“粘贴”时调用。

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/

【问题讨论】:

  • 我怀疑您可以将任何内容粘贴到不可编辑的元素中
  • @Ovi - 因为 Chrome 中的一种错误,它会在 Chrome 中工作吗?

标签: javascript google-chrome firefox paste


【解决方案1】:

据我所知,您将不得不为每个浏览器代理分别处理粘贴。 Joshua Gross 在这篇文章中介绍了 paste 事件的很多复杂性:Paste Wasteland

Firefox 喜欢更加迟钝,但可以通过将剪贴板数据视为 Blob 来将图像数据读取为文件。 (见 Gross 文章的后记) 这是浏览器中几乎未处理的遗留代码,它们以略微不同的方式处理操作系统事件,并简洁地总结了为什么我们在 WebAPI 等事物中拥有标准化的大多数新功能。 我希望这会有所帮助。

【讨论】:

  • 还有一个关于这个issue in FF的代码。但它仍然没有解决,最后一次更新是在 2014 年。
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2019-12-22
相关资源
最近更新 更多