我有一个拖放区,我想在其中检测拖动的项目是文件夹还是文件。在 chrome 中,我通过使用实现了这一点
for (var i = 0; i < nrOfFiles; i++) {
var entry = e.originalEvent.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
//folder detection
}
在 Firefox 中,无法使用上述解决方案(webkit),在花了很多时间试图解决这个问题后,我想出了以下解决方案(但失败了)
我检查拖动的项目是否没有类型和大小,如下所示,并且在大多数情况下它按预期工作。从我读过的内容来看,这不是有效的,也不是一直成功,因为有些文件可能没有文件扩展名,所以我尝试使用 FileReader API 将文件读取为二进制字符串(readAsBinaryString)或 readAsArrayBuffer 并捕获异常,以防项目是不可读,但永远不会抛出异常。
var files = e.originalEvent.dataTransfer.files; for (var i = 0; i < nrOfFiles; i++) { if (files[i].size === 0 && files[i].type==="") { try{ var reader = new FileReader(); reader.readAsBinaryString(files[i]); }catch(e){ //folder detection ? } }}
在以下解决方案中,我尝试使用 mozGetDataAt,它是相应的 webkitGetAsEntry(??? 不是 100%,如果我错了,请纠正我),但我遇到了安全异常。
var entry = e.originalEvent.dataTransfer.mozGetDataAt("application/x-moz-file",i); if (entry.isDirectory) { //not even reaching this statement. idk if isDirectory is applicable to entry //folder detection? }
例外是:
http://localhost:8080为类 UnnamedClass 的对象创建包装器的权限被拒绝
实际上有没有办法在 Firefox 中做到这一点?如果可能,我不想依赖第三方库或服务器端处理。任何建议 - 评论将不胜感激。