gpt4 book ai didi

javascript - 无法在 'atob' 上执行 'Window'

转载 作者:技术小花猫 更新时间:2023-10-29 11:52:59 24 4
gpt4 key购买 nike

当用户按下 ctrl + s 键但 Chrome 崩溃时,我试图在 Chrome 中保存我的 HTML 文件。

(我只想下载我的 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>")

这里出现错误:无法在“Window”上执行“atob”:要解码的字符串未正确编码。

我不知道,但我读到我需要将我的字符串编码为 base64:How can you encode a string to Base64 in JavaScript?

有 148 票的答案。我将其粘贴到我的代码中,但不知道如何继续。

我应该在哪里调用它以及如何调用它?我可以为保存的文件命名吗?

我认为我需要做类似的事情:

download(_utf8_decode("<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>"))

最佳答案

BlobBuilder已过时,请使用 Blob constructor相反:

URL.createObjectURL(new Blob([/*whatever content*/] , {type:'text/plain'}));

这会返回一个 blob URL,然后您可以在 anchor 的 href 中使用它。您还可以修改 anchor 的 download 属性来操纵文件名:

<a href="/*assign url here*/" id="link" download="whatever.txt">download me</a>

Fiddled .如果我没记错的话,对受信任的非用户发起的下载有任意限制;因此,我们将坚持点击链接,这被认为是充分由用户发起的:)

更新:保存当前文档的 html 实际上非常简单!每当我们的交互式链接被点击时,我们都会用相关的 blob 更新它的 href。执行点击绑定(bind)事件后,将导航到下载 URL!

$('#link').on('click', function(e){
this.href = URL.createObjectURL(
new Blob([document.documentElement.outerHTML] , {type:'text/html'})
);
});

Fiddled again .

关于javascript - 无法在 'atob' 上执行 'Window',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com