3

这是确切问题的jsfiddle

对我来说,“dragenter”事件 dataTransfer.files 在除 Firefox 之外的所有内容中都被正确定义。但是,“drop”事件始终具有正确的 dataTransfer.files,即使在 Firefox 中也是如此。

不确定这是否是 Firefox(21.0 和现在的 23.0.1)中可能存在的错误,它发生在 Mac OS 和 Windows 上。

和完整的代码:

function preventDefault(_e) {
    _e.preventDefault();
}

var dropZone = document.getElementById('drop-zone');
dropZone.addEventListener("dragstart", preventDefault, false);
dropZone.addEventListener("dragleave", preventDefault, false);
dropZone.addEventListener("drag", preventDefault, false);
dropZone.addEventListener("dragend", preventDefault, false);
dropZone.addEventListener("dragover", preventDefault, false);
dropZone.addEventListener("dragenter", function(_e) {
    _e.preventDefault();
    console.log(_e.dataTransfer.files);
}, false);
dropZone.addEventListener("drop", function(_e) {
    _e.preventDefault();
    console.log(_e.dataTransfer.files);
}, false);

其他人有同样的结果吗?

这可能是一个沙盒限制,但我还没有找到任何关于它的...

任何和所有的想法和答案都表示赞赏:)。

4

1 回答 1

3

根据规范whatwg),数据处于“受保护模式”,意味着不可用。我猜这是为了防止网站从不适合他们的拖拽中窥探/窃取内容。

所以,我的解释是 Firefox 实际上不允许访问.filesin是正确的dragenter,并且该错误与其他浏览器有关。

PS:Firefox 源,明确返回什么都不在dragenter.

于 2013-08-17T17:46:14.320 回答