Autor | Zpráva | ||
---|---|---|---|
xROAL Profil |
#1 · Zasláno: 22. 8. 2015, 17:28:41
O čo mi ide: chcem vytvoriť jednoduchú webovú aplikáciu, ktorá bude čítať textové súbory. Najlepšie by bolo, keby sa dali súbory otvoriť jednoducho ich potiahnutím do určeného
div u.
Toto je kód, ktorý by mal odchytiť drop udalosť:
dropHere.addEventListener('drop', function(e) { e.preventDefault(); var data = e.dataTransfer.getData('text'); console.log(data); }); Čo som tak pozeral na nete, nič viac by nemalo byť potrebné (akurát tak ešte zrušiť nejaké iné drag udalosti, ale to mám).
Problém je, do konzoly sa vypíše prázdny string . Našiel som sa nete rôzne problémy s tým, že getData() vracalo null alebo undefined , ale nenarazil som na problém, kde by to vrátilo prázdny reťazec.
Keď do konzoly vypíšem e.dataTransfer.files[0] , tak tam po správnosti je File objekt, ktorý má nastavený správny názov, dátum poslednej úpravy, veľkosť súboru a aj správny typ súboru.
Problém sa prejavoval na Windows 7 s Chrome. Na inom zariadení som to netestoval. Môže byť problém v tom? Alebo máte iné nápady? |
||
_es Profil |
#2 · Zasláno: 22. 8. 2015, 18:04:20
xROAL:
„Našiel som sa nete rôzne problémy s tým, že getData() vracalo null alebo undefined, ale nenarazil som na problém, kde by to vrátilo prázdny reťazec.“ A nie je to vlastne jedno? Je prirodzené, že prístup k dátam z lokálneho disku v JS má rôzne obmedzenia. Možno to treba nejako špeciálne v prehliadači povoliť, možno pre konkrétnu adresu. Alebo, nie je súbor priveľký - možno vtedy prehliadač odmietne hentak načítať jeho obsah. „Najlepšie by bolo, keby sa dali súbory otvoriť jednoducho ich potiahnutím do určeného divu.“ Nie je to nepraktické? To sa potom prehliadač ani nebude dať použiť maximalizovaný. Či ak sa pri tom „potiahnutí“ súbor „pustí“ niekde inde ako v prehliadači - tu bude radosť pracovať s takou aplikáciou. |
||
xROAL Profil |
#3 · Zasláno: 22. 8. 2015, 18:40:19
_es:
„A nie je to vlastne jedno?“ NULL alebo undefined podľa mňa značí chybu v samotnom celkovom procese/súbor nemá žiadny obsah. Ak ale prehliadač rozozná, že ide o súbor "test.txt", ktorý bol naposledy upravený 22.8.2015 o 18:13, je to "text/plain" a jeho veľkosť je 96B, no pri tom ako jeho obsah vráti len prázdny reťazec, tak ten celkový proces asi až tak úplne nezlyhal.
„Je prirodzené, že prístup k dátam z lokálneho disku v JS má rôzne obmedzenia.“ Áno, jedno obmedzenie ktoré napríklad existuje je, že prehliadač umožní prístup k dátam a súboru len v handleri drop udalosti. Mimo tejto funkcie ti dataTransfer.getData() vráti undefined (väčšinou sa ľudia pýtali na toto, aspoň čo som ja našiel).
Všeobecne platí, že takéto veci sa môžu vykonávať len v handleroch určitých udalostí (drop, click, submit, a pod., resp. udalosti spustené priamo návštevníkom stránky). „Možno to treba nejako špeciálne v prehliadači povoliť, možno pre konkrétnu adresu.“ Existuje viacero webov/služieb ktoré umožňujú nahrávať súbory ich potiahnutím a pustením. Nikdy na to nepýtali žiadne povolenie. „Nie je to nepraktické? To sa potom prehliadač ani nebude dať použiť maximalizovaný. Či ak sa pri tom ‚potiahnutí‘ súbor ‚pustí‘ niekde inde ako v prehliadači - tu bude radosť pracovať s takou aplikáciou.“ Drag & drop vyzeral jednoduchý na implementáciu a mne osobne sa často stane, že sa preklikám na zdielanom disku do 15 podpriečinku, kde sa zrazu nachádza súbor, ktorý by som chcel v tejto aplikácii otvoriť. Príde mi pohodlnejšie v takomto prípade mať možnosť drag & drop, ako byť nútený sa znovu do toho priečinku preklikávať, či kopírovať cestu k súboru - toto sa pokojne môže stať aj niekomu inému. Podpora drag & drop samozrejme nevylučuje iné možnosti otvárania súborov - ani iné možnosti vynechať nechcem. |
||
Časová prodleva: 9 let
|
0