我有一个拖放区域,想要检测被拖动的项目是文件夹还是文件。在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(??? 如果我错了,请纠正我),但我遇到了安全异常。
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 的权限,以创建未命名类对象的包装器
在 Firefox 中是否有实际的方法可以解决这个问题?如果可能的话,我不想依赖第三方库或服务器端处理。任何建议和评论都将不胜感激。