Come far visualizzare a un browser “salva come finestra di dialogo” in modo che l’utente possa salvare il contenuto di una stringa in un file sul proprio sistema?

Come posso fare in modo che un browser visualizzi una “salva come finestra di dialogo” in modo che l’utente possa salvare il contenuto di una stringa in un file sul suo sistema?

Per esempio:

var myString = "my string with some stuff"; save_to_filesystem(myString,"myString.txt"); 

Risultante in qualcosa di simile:

Esempio

Nel caso qualcuno si stia ancora chiedendo …

L’ho fatto in questo modo:

Save

non ricordo la mia fonte ma utilizza le seguenti tecniche \ caratteristiche:

  1. attributo di download html5
  2. dati uri’s

Trovato il riferimento:

http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/


EDIT: come puoi raccogliere dai commenti in cui NON funziona

  1. Internet Explorer (funziona comunque in Edge v13)
  2. Safari
  3. Safari iOS
  4. Opera Mini
  5. Browser Android (4.3 e versioni precedenti)

http://caniuse.com/#feat=download

Questo è ansible utilizzando l’implementazione javascript cross-browser della funzione saveAs HTML5: https://github.com/koffsyrup/FileSaver.js

Se tutto ciò che si vuole fare è salvare il testo, lo script sopra funziona in tutti i browser (comprese tutte le versioni di IE), usando nient’altro che JS.

C’è una libreria javascript per questo, vedi FileSaver.js su Github

Tuttavia la funzione saveAs() non invierà pura stringa al browser, è necessario convertirla in blob :

 function data2blob(data, isBase64) { var chars = ""; if (isBase64) chars = atob(data); else chars = data; var bytes = new Array(chars.length); for (var i = 0; i < chars.length; i++) { bytes[i] = chars.charCodeAt(i); } var blob = new Blob([new Uint8Array(bytes)]); return blob; } 

e quindi chiamare saveAs sul saveAs come se fossero:

 var myString = "my string with some stuff"; saveAs( data2blob(myString), "myString.txt" ); 

Naturalmente ricordati di includere la libreria javascript sopra menzionata sulla tua pagina web usando

Usando execComand:

  

Nel link seguente: execCommand