假设我有一个名为“data.json”的数据文件,其中包含一些JSON或者它可以为空。我创建了一个函数,将我的JSON字符串打包在变量中,所以如果我这样做,
var myJSONVar = myJSONString;
console.log(myJSONVar);
我会打印,
[{ "my":"JSON" }]
如何使用Javascript将myJSONVar的内容转储到“data.json”文件,而无需使用服务器端语言或外部JS库?这完全不可能吗?
答案 0 :(得分:0)
我不认为这是不可能的,除非你在谈论遗留机器,在这种情况下你需要某种服务器回声。
在所有三种主要浏览器的当前版本中,您可以使用JS从字符串下载带有自定义名称的文件:
<script>
//from: http://danml.com/js/download.js
function download(strData, strFileName, strMimeType) {
var D = document,
A = arguments,
a = D.createElement("a"),
d = A[0],
n = A[1],
t = A[2] || "text/plain";
//build download link:
a.href = "data:" + strMimeType + "," + escape(strData);
if (window.MSBlobBuilder) {
var bb = new MSBlobBuilder();
bb.append(strData);
return navigator.msSaveBlob(bb, strFileName);
} /* end if(window.MSBlobBuilder) */
if ('download' in a) {
a.setAttribute("download", n);
a.innerHTML = "downloading...";
D.body.appendChild(a);
setTimeout(function() {
var e = D.createEvent("MouseEvents");
e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
D.body.removeChild(a);
}, 66);
return true;
} /* end if('download' in a) */
; //end if a[download]?
//do iframe dataURL download:
var f = D.createElement("iframe");
D.body.appendChild(f);
f.src = "data:" + (A[2] ? A[2] : "application/octet-stream") + (window.btoa ? ";base64" : "") + "," + (window.btoa ? window.btoa : escape)(strData);
setTimeout(function() {
D.body.removeChild(f);
}, 333);
return true;
} /* end download() */
var myJSONVar = [{ "my":"JSON" }];
download( JSON.stringify(myJSONVar, null, "\t"), "data.json", "text/plain");
</script>