私が知っている唯一の方法はFileSaver.jsで使用されるトリックです:
- 非表示の
<a>
タグを作成します。
- その
href
属性をblobのURLに設定します。
- その
download
属性をファイル名に設定します。
<a>
タグをクリックします。
以下は簡単な例です(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);
この例は、アイデアを説明するためだけに作成しました。本番用コードでは、代わりにFileSaver.jsを使用してください。
ノート
- 古いブラウザはHTML5の一部であるため、「download」属性をサポートしていません。
- 一部のファイル形式はブラウザによって安全でないと見なされ、ダウンロードが失敗します。txt拡張子の付いたJSONファイルを保存すると、うまくいきます。