Я пытаюсь сохранить свой HTML файл в Chrome, когда пользователь нажимает клавиши ctrl + s
, но 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: Как вы можете закодировать строку Base64 в JavaScript?
Есть ответ на 148 голосов. Я вставляю его в свой код и не знаю, как продолжить.
Где я должен это назвать и как? Могу ли я поместить имя в сохраненный файл?
Я думаю, что мне нужно сделать что-то вроде:
download(_utf8_decode("<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>"))