我正在编写一个Google Chrome扩展程序,可让您下载数据的备份文件。我希望用户能够按下按钮并打开“另存为”对话框,他们可以将文件保存到他们的计算机上。似乎没有任何工作,我没有在互联网上找到答案。我尝试了几种方法:
document.execCommand('SaveAs', null, 'filename.json');
这不起作用,因为此命令仅限IE,并且似乎没有Webkit替代ctrl/cmd+s
来自数据URI的网页XMLHTTPRequest
。我没有试过这个,但是必须有一些方法可以转发请求吗?请注意,我不想使用外部服务器(在这种情况下,我可以简单地发送一个POST请求并应用内容处置:-header)我不想使用任何外部服务器的原因是我不想为主机付费,并且发送的数据可能对用户敏感,我不想侵犯任何人的隐私。
有没有人让这个工作?
答案 0 :(得分:3)
我在Github的Appmator代码中做了如下。
基本方法是构建你的Blob,无论你想要什么(Chrome / WebKit / Firefox在XmlHttpRequest上有一个responseBlob,你可以使用它),创建一个iframe(隐藏,显示:无)然后分配iframe的src成为Blob。
这将启动下载并将其保存到文件系统。唯一的问题是,你无法设置文件名。
var savaeas = document.getElementById("saveas");
var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();
var output = Builder.output({"binary":true});
var ui8a = new Uint8Array(output.length);
for(var i = 0; i< output.length; i++) {
ui8a[i] = output.charCodeAt(i);
}
bb.append(ui8a.buffer);
var blob = bb.getBlob("application/octet-stream");
var saveas = document.createElement("iframe");
saveas.style.display = "none";
if(!!window.createObjectURL == false) {
saveas.src = window.webkitURL.createObjectURL(blob);
}
else {
saveas.src = window.createObjectURL(blob);
}
document.body.appendChild(saveas);