Der einzige Weg, mir bewusst bin, ist der von FileSaver.js verwendet Trick:
- einen versteckten
<a>
-Tag erstellen.
- Setzen Sie das Attribut
href
auf die URL des Blobs.
- Setzen Sie das Attribut
download
auf den Dateinamen.
- Klicken Sie auf den Tag
<a>
.
Hier ist ein vereinfachtes Beispiel (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);
ich dieses Beispiel schrieb nur die Idee zu veranschaulichen, in der Produktion Code Verwendung FileSaver.js statt.
Hinweise
- Ältere Browser den "download" Attribut nicht unterstützen, da sie Teil von HTML5 ist.
- Einige Dateiformate werden vom Browser als unsicher angesehen und der Download schlägt fehl. Speichern von JSON-Dateien mit TXT-Erweiterung funktioniert für mich.
Seltsamerweise scheint es zu versagen, wenn ich es kopiere und in CodePen einfügen. Obwohl Ihr Code scheint echt und gut http://codepen.io/ashblue/pen/jEhmH –
Ihr Code-Code funktioniert für mich in Chrome. Die JSON-Datei wird im Download-Ordner von Chrome gespeichert. – kol
@AshBlue Das "Download" -Attribut benötigt HTML5. Mein Code ist nur ein Beispiel, Sie können auch die FileSaver.js-Demoseite ausprobieren: http://eligrey.com/demos/FileSaver.js/ – kol