Wiem, że ten problem może być duplikatem, ale ponieważ żadne z istniejących rozwiązań nie może mi pomóc, publikuję mój własny problem. Mam obszar upuszczania, w którym chcę wykryć, czy przeciągnięty element jest folderem, czy plikiem. W chromie i osiągnąć to za pomocąWykrywanie folderów HTML5 metodą przeciągania i upuszczania w Firefoksie. Czy to możliwe?
for (var i = 0; i < nrOfFiles; i++) {
var entry = e.originalEvent.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
//folder detection
}
w firefox nie jest możliwe zastosowanie powyższy roztwór (WebKit), a po spędzeniu wielu godzin próbuje rozwiązać ten wpadłem następujących rozwiązań (i nie),
Sprawdzam, czy przeciągany przedmiot nie ma typu i rozmiaru, jak poniżej iw większości przypadków działa zgodnie z oczekiwaniami. Z tego, co przeczytałem, to nie jest wydajne i nie powiodło się przez cały czas, ponieważ niektóre pliki mogą nie mieć rozszerzenia pliku, więc próbuję odczytać plik jako ciąg binarny (readAsBinaryString) lub readAsArrayBuffer z API FileReader i wychwycić wyjątek w przypadku, gdy element jest nieczytelne, ale wyjątek nigdy nie jest rzucany.
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 ? } }}
W poniższym roztworem Próbuję użyć mozGetDataAt która jest odpowiednia webkitGetAsEntry (??? Nie 100% o to proszę mnie poprawić, jeśli się mylę), ale otrzymuję wyjątek zabezpieczeń.
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? }
i wyjątek jest:
Permission denied for <http://localhost:8080> to create wrapper for object of class UnnamedClass
Czy istnieje sposób, aby rzeczywiście to zrobić w firefox? Nie chcę polegać na bibliotekach stron trzecich lub przetwarzaniu po stronie serwera, jeśli to możliwe. Wszelkie sugestie-komentarze będą mile widziane.
Dzięki
M
Jest to możliwe teraz! Zobacz moją odpowiedź: http://stackoverflow.com/a/33431704/195216 – dforce