这是确切问题的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);
其他人有相同的结果吗?
这可能是一个沙箱限制,但我还没有找到任何关于它的内容......
赞赏任何和所有的想法和答案:)。
答案 0 :(得分:2)
根据spec(whatwg),数据处于“保护模式”,意味着不可用。我猜这是为了防止网站窥探/窃取不适合他们的拖拽内容。
所以,我的解释是Firefox实际上不允许访问.files
中的dragenter
,而且该错误与其他浏览器有关。
PS:Firefox source,在dragenter
上明确返回任何内容。