HTML5拖放getData()只适用于Chrome中的拖放事件

HTML5 Drag and Drop getData() only works on drop event in Chrome?

本文关键字:拖放 Chrome 事件 适用于 getData HTML5      更新时间:2023-09-26

我目前正在处理一个项目,该项目使用HTML5拖放API来提供添加的功能,包括在浏览器中拖动项目和从浏览器中拖动项。我目前遇到了Chrome特有的问题(除此之外,只在Firefox中进行了测试,它可以正常工作)。

问题是,我不能在除drop事件之外的任何事件中使用event.dataTransfer.getData(type)方法返回dragstart事件上的数据集。

在绑定到dragstart事件(它确实触发)后,我这样设置事件:

event.dataTransfer.setData('text/plain', "some string")

然后在drop事件中,我可以很好地获取数据。

event.dataTransfer.getData('text/plain')

但是,我不能在任何其他事件(如dragover)上使用与上述相同的方法。即使我在调用setData()后(即在dragstart回调中)尝试在线路上使用上述方法,它仍然会返回undefined

因此,在Chrome中,问题是Chrome中的getData将始终返回undefined,除了在drop事件回调中。(在Firefox中,我可以成功地获得正确的数据。)

如果您有对同一拖动元素的dataTransfer对象的引用,那么为什么在删除数据之前不能获取数据呢?

只是想知道:

  • 以前有人在Chrome上遇到过这种麻烦吗
  • 有什么变通办法
  • 或者,这是Chrome需要修复的问题吗

资源:HTML5拖放规范。

WebKit以及Chrome对何时可以调用getData有很大的限制。不允许在dragstartdragover中执行此操作。我认为这是典型的错误。

引用这个答案:

数据只在拖放时可用,这是一个安全功能,因为当你碰巧在网页上拖动东西时,网站可能会抓取数据。