Newsgroup: it.comp.lang.javascript
Titolo: aprire e leggere file locali

Mi potete indicare una guida per imparare come aprire e leggere file in 
JavaScript?
E' per una applicazione domestica in cui devo presentare nel browser il 
contenuto dei file presenti sul disco usb attaccato al router.

 JavaScript?
 
Che browser vuoi supportare, innanzitutto?
 
Ricordati che accedere al file system locale è un operazione che
generalmente non puoi fare, con gli accessi che hai su web. A meno che,
nei browser che lo supportano, tu non sfrutti le File API, ma deve
comunque essere l'utente a selezionare, in un <input type=file>, il file
di cui vuoi leggere il contenuto. Non puoi, ad esempio, scorrerti
directory e via dicendo – almeno usando gli standard web e appunto con
gli accessi normali.
 
Sai altrimenti che bachi nella sicurezza ci sarebbero, ogni volta che
navighi. :)
 

 gli accessi normali.
 
Ok. E se invece conoscessi a priori la posizione e il nome del file, 
potrei bypassare la procedura di scelta, e iniziare a leggere il file 
nudo e crudo?

 nudo e crudo?
 
No, sarebbe un bel grosso baco nella sicurezza non trovi? Navighi sul
mio sito, e io vado alla ricerca di file di sistema sul tuo computer che
possono contenere dati sensibili, perché so dove trovarli.
 
Dato che usi Firefox puoi optare per le seguenti alternative:
 
1. Fai un'estensione che comunica con la tua pagina web (e viceversa).
L'estensione ha più privilegi della pagina web, quindi può accedere al
file system dell'utente e fare quelle operazioni che la tua pagina non è
in grado di fare, scambiando dati con essa.
Lo svantaggio è che l'utente deve prima installarsi tale estensione.
Puoi comunque farla restartless, quindi:
 
 a. L'utente va sulla pagina in questione
 b. La pagina in questione tenta di comunicare con l'estensione, non
riuscendovi, perché non installata.
 c. Mostra quindi un link "clicca qui per abilitare bla bla bla".
 d. L'utente clicca, viene visualizzata la procedura di installazione
dell'estensione
 e. Alla fine, senza fare il restart del browser, l'utente può
continuare a usare la tua pagina
 
Ovviamente questi sono gli step in cui l'utente va sulla tua pagina per
la prima volta, dopo che l'estensione è installata, al punto "b" la
pagina ha una risposta e non deve visualizzare nient'altro.
 
2. Chiedi il permesso all'utente di devastre il suo computer
Onestamente non so se ancora vale come procedura, ma puoi chiedere
tramite JS all'utente di dare alla pagina in questione più diritti di
quanto avrebbe normalmente, dandoti quindi accesso tramite alcune classi
particolari al File System. Ovviamente all'utente gli appare un mega
alert con scritto "Attenzione! Sei sicuro di volerlo fare? Se lo fai la
pagina può fare i suoi porci comodi con il tuo computer" o roba del genere.
 
3. Se file e pagina si trovano nello stesso percorso
(file:///foo/bar/index.html e file:///foo/bar/file.dat), dovresti essere
in grado di leggerlo tramite XMLHttpRequest, lo carichi come binario e
poi tramite le File API ci fai quel che vuoi. Mi pare che FF consideri
"Same Origin" fino al folder, mentre Chrome tutto l'URL per il
protocollo file:// ma potrei sbagliarmi, devi vedere.
 
Questo è quello che mi viene in mente così, su due piedi.

 protocollo file:// ma potrei sbagliarmi, devi vedere.
 
Ecco questa mi aggrada. Farò delle prove, grazie. XMLHttpRequest vale 
anche per indirizzi del tipo 
ftp://foo/bar/file.dat
 ?

 anche per indirizzi del tipo 
ftp://foo/bar/file.dat
 ?
 
Presuppongo che la pagina si trovi in file:///foo/bar/index.html o in
http://foo/bar/index.html
; in entrambi i casi la risposta è "no" perché
cambiando protocollo violi la Same Origin Policy.