【问题标题】:Firefox bug, drag events give dataTransfer.files = null, defined in all other browsersFirefox 错误,拖动事件给 dataTransfer.files = null,在所有其他浏览器中定义
【发布时间】:2013-08-17 15:14:31
【问题描述】:

这里是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);

其他人也有同样的结果吗?

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

感谢任何和所有想法和答案:)。

【问题讨论】:

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


    【解决方案1】:

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

    所以,我的解释是,Firefox 不允许在dragenter 中访问.files 实际上是正确的,而错误在于其他浏览器。

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

    【讨论】:

    • 太棒了,谢谢你的回答,它真的很清楚!我找不到任何东西,因为我不知道要寻找什么。 w3.org 和 whatwg.org 是这类事情的绝佳来源。
    • 不幸的是,这很荒谬,因为您无法验证被拖动文件的类型,这就是验证从桌面拖动的全部意义所在。现在我们不得不说我们接受任何文件类型,直到我们真正在 drop 上进行验证:\
    • 不应该保护模式只禁止文件读取,而不是禁止文件列表及其大小?我不想使用浏览器特定的mozItemCount。在 Chrome 中,您实际上可以在 dragenter 上使用 FileReader 打开文件!此规范是否仍涵盖受保护的文件数和文件大小?
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多