【发布时间】:2014-04-29 23:41:51
【问题描述】:
当用户按下ctrl + s 键但 Chrome 崩溃时,我正在尝试将我的 HTML 文件保存在 Chrome 中。
(我只想下载我的 HTML 文件的源代码)
我读到这是因为我的文件大于 1.99M..
第一次尝试(在我知道 Chrome 崩溃之前):
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
pom.click();
}
download('test.html', "<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>");
第二次尝试,在阅读了崩溃的消息后,我使用了blob:
function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var bb = new BlobBuilder();
bb.append(ab);
return bb.getBlob(mimeString);
}
function download(dataURI) {
var blob = dataURItoBlob(dataURI);
var url = window.URL.createObjectURL(blob);
window.location.assign(url);
}
download("<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>")
这里我得到了错误:Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
我不知道,但我读到我需要将我的字符串编码为 base64:How can you encode a string to Base64 in JavaScript?
有 148 票的答案。我将其粘贴到我的代码中,但不知道如何继续。
我应该在哪里调用它以及如何调用它?我可以在我保存的文件上命名吗?
我认为我需要这样做:
download(_utf8_decode("<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>"))
【问题讨论】:
-
你到底想达到什么目的?
-
我有一个html文件..有可以动态插入的输入..(用户可以在这些输入中写文本)..写完文本后,我想保存页面与他的变化,为了让他继续他离开的地方..
-
为什么不只保存输入然后将它们嵌入到下一页?
-
我没听懂你的意思.. 用户可以在他离开的地方继续吗?如果他可以,请建议我..假设我有:jsfiddle.net/jaredwilli/tZPg4/4 并且我添加了 3 个输入..我怎样才能让用户关闭文件然后继续他离开的点(还有 3 个输入)..(假设我只有带有大数据的 html 文件.. 4 mb)
-
尝试找到(在您的代码中)重定向路径,并关注它,也许在您的函数 download() 中...在您的代码中搜索一点,查看 URI 定义!这两种环境都发生过吗?还是仅在您尝试部署时用于生产?
标签: javascript jquery html