Scaricare file usando Javascript/jQuery
Ho un requisito molto simile specificato qui.
Ho bisogno che il browser dell'utente avvii un download manualmente quando $('a#someID').click();
Ma non posso usare il metodo window.href
, poiché sostituisce il contenuto corrente della pagina con il file che si sta cercando di scaricare.
Invece voglio aprire il download in una nuova finestra/tab. Come è possibile?
322
3
Usa un
<iframe>
invisibile:Per forzare il browser a scaricare un file che altrimenti sarebbe in grado di rendere (come HTML o file di testo), è necessario che il server imposti il MIME Type del file ad un valore insensato, come
application/x-please-download-me
o in alternativaapplication/octet-stream
, che è usato per dati binari arbitrari.Se vuoi solo aprirlo in una nuova scheda, l'unico modo per farlo è che l'utente clicchi su un link con il suo attributo
target
impostato su_blank
.In jQuery:
Ogni volta che quel link viene cliccato, scaricherà il file in una nuova scheda/finestra.
2019 aggiornamento dei browser moderni
Questo è l'approccio che raccomando ora, con alcune avvertenze:
2012 approccio originale basato su jQuery/iframe/cookie
Ho creato il jQuery File Download plugin (Demo) (GitHub) che potrebbe anche aiutare nella tua situazione. Funziona abbastanza similmente con un iframe ma ha alcune caratteristiche interessanti che ho trovato abbastanza utili:
Molto facile da configurare con belle immagini (jQuery UI Dialog, ma non richiesto), tutto è anche testato
L'utente non lascia mai la stessa pagina da cui ha iniziato il download di un file. Questa caratteristica sta diventando cruciale per le moderne applicazioni web
Le funzioni successCallback e failCallback permettono di essere espliciti su ciò che l'utente vede in ogni situazione
In combinazione con jQuery UI uno sviluppatore può facilmente mostrare una modale per dire all'utente che si sta verificando un download di file, sciogliere la modale dopo l'inizio del download o anche informare l'utente in modo amichevole che si è verificato un errore. Vedi la Demo per un esempio di questo. Spero che questo aiuti qualcuno!
Ecco un semplice caso d'uso demo che utilizza il plugin source con le promesse. La pagina demo include anche molti altri esempi di UX migliori.
Se stai già usando jQuery, potresti approfittarne per produrre uno snippet più piccolo Una versione jQuery della risposta di Andrew: