HTML5拖放getData()仅适用于Chrome中的drop事件?

时间:2012-03-02 14:12:27

标签: javascript html5 drag-and-drop

我目前正在开发一个使用HTML5拖放API的项目来提供附加功能,包括将项目拖入和拖出浏览器。我目前遇到特定于Chrome的问题(否则只在Firefox中测试,它按预期工作)。

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

在绑定到dragstart事件(触发后)后,我设置了这样的事件:

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

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

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

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

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

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

只是想知道:

  • 之前有没有人遇到Chrome的问题?
  • 有什么变通方法?
  • 或者,Chrome是否需要修复?

资源: Specification for HTML5 drag and drop.

2 个答案:

答案 0 :(得分:22)

WebKit,以及Chrome,对于何时可以致电getData非常严格。您不允许在dragstart or dragover内执行此操作。我想this is the canonical bug

答案 1 :(得分:3)

引用this answer

  

这些数据只能在drop下使用,这是一项安全功能,因为当您在网页上拖动某些内容时,网站可能会抓取数据。