A única maneira de conhecer é o truque usado pelo FileSaver.js :
- Crie uma
<a>
tag oculta .
- Defina seu
href
atributo para a URL do blob.
- Defina seu
download
atributo para o nome do arquivo.
- Clique na
<a>
etiqueta.
Aqui está um exemplo 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);
Eu escrevi este exemplo apenas para ilustrar a ideia. No código de produção, use o FileSaver.js.
Notas
- Navegadores mais antigos não oferecem suporte ao atributo "download", pois faz parte do HTML5.
- Alguns formatos de arquivo são considerados inseguros pelo navegador e o download falha. Salvar arquivos JSON com extensão txt funciona para mim.