Firefox bug,拖动事件给出dataTransfer.files = null,在所有其他浏览器中定义

时间:2013-08-17 15:14:31

标签: javascript firefox javascript-events drag-and-drop dragenter

这是确切问题的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);

其他人有相同的结果吗?

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

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

1 个答案:

答案 0 :(得分:2)

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

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

PS:Firefox source,在dragenter上明确返回任何内容。