La única forma en que soy consciente es el truco utilizado por FileSaver.js :
- Crea una
<a>etiqueta oculta .
- Establezca su
hrefatributo en la URL del blob.
- Establezca su
downloadatributo al nombre del archivo.
- Haga clic en la
<a>etiqueta
Aquí hay un ejemplo simplificado ( 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);
Escribí este ejemplo solo para ilustrar la idea, en el código de producción use FileSaver.js en su lugar.
Notas
- Los navegadores más antiguos no admiten el atributo "descargar", ya que es parte de HTML5.
- Algunos formatos de archivo son considerados inseguros por el navegador y la descarga falla. Guardar archivos JSON con extensión txt me funciona.