La seule méthode que je connaisse est le truc utilisé par FileSaver.js :
- Créez une balise cachée.
- Définissez son attribut
href
sur l'URL du blob.3. Définissez son attribut download
sur le nom de fichier.
- Cliquez sur la balise .
Voici un exemple simplifié (jsfiddle):
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
saveData(data, fileName);
J'ai écrit cet exemple juste pour illustrer l'idée, dans le code de production utilisez FileSaver.js à la place.
Notes
- Les anciens navigateurs ne prennent pas en charge l'attribut "download", car il fait partie de HTML5.
- Certains formats de fichier sont considérés comme non sécurisés par le navigateur et le téléchargement échoue. Enregistrer les fichiers JSON avec l'extension txt fonctionne pour moi.