gpt4 book ai didi

javascript - 是否有用于使用数据 uri 进行链接下载的 polyfill?

转载 作者:行者123 更新时间:2023-11-30 15:27:18 25 4
gpt4 key购买 nike

我有一些代码应该由服务器生成:

<a download="test.csv" href="data:text/plain;charset=utf-8;base64,w4FydsOtenTFsXLFkXTDvGvDtnJmw7p0w7Nnw6lwLg==">
teszt
</a>

它适用于当前的 chrome、firefox、opera。我希望它支持 MSIE11。 Afaik msSaveBlob 是解决方案。是否有我可以使用的现有 js polyfill,或者我应该编写它吗?

最佳答案

好吧,我根据我在 SO answers 和 here 中找到的代码制作了一个简单的 polyfill .我在 MSIE11 上测试过,它可以工作。它不支持使用 XHR 下载文件,仅支持数据 URI。如果您想强制下载文件,我建议改用 Content-Disposition 响应 header 。在我的例子中,服务器只是创建文件,但不应该存储它,而且我还需要一个 HTML 响应,所以这是可行的方法。另一种解决方案是通过电子邮件发送文件,但我发现这个文件越小越好。

(function (){

addEvent(window, "load", function (){
if (isInternetExplorer())
polyfillDataUriDownload();
});

function polyfillDataUriDownload(){
var links = document.querySelectorAll('a[download], area[download]');
for (var index = 0, length = links.length; index<length; ++index) {
(function (link){
var dataUri = link.getAttribute("href");
var fileName = link.getAttribute("download");
if (dataUri.slice(0,5) != "data:")
throw new Error("The XHR part is not implemented here.");
addEvent(link, "click", function (event){
cancelEvent(event);
try {
var dataBlob = dataUriToBlob(dataUri);
forceBlobDownload(dataBlob, fileName);
} catch (e) {
alert(e)
}
});
})(links[index]);
}
}

function forceBlobDownload(dataBlob, fileName){
window.navigator.msSaveBlob(dataBlob, fileName);
}

function dataUriToBlob(dataUri) {
if (!(/base64/).test(dataUri))
throw new Error("Supports only base64 encoding.");
var parts = dataUri.split(/[:;,]/),
type = parts[1],
binData = atob(parts.pop()),
mx = binData.length,
uiArr = new Uint8Array(mx);
for(var i = 0; i<mx; ++i)
uiArr[i] = binData.charCodeAt(i);
return new Blob([uiArr], {type: type});
}

function addEvent(subject, type, listener){
if (window.addEventListener)
subject.addEventListener(type, listener, false);
else if (window.attachEvent)
subject.attachEvent("on" + type, listener);
}

function cancelEvent(event){
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
}

function isInternetExplorer(){
return /*@cc_on!@*/false || !!document.documentMode;
}

})();

关于javascript - 是否有用于使用数据 uri 进行链接下载的 polyfill?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767200/

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