Safari问题:下载的文件名为“未知”;Javascript

Safari Issue : Downloaded file name is "Unknown" Javascript

本文关键字:未知 Javascript 文件名 问题 下载 Safari      更新时间:2023-09-26

我已经将我现有的数据转换为文本/csv,并能够在Chrome中下载文件,但当尝试在iPad或Mac上使用Safari时,它会打开一个标签,名称为"未知"/"无题"。这是我使用的代码-

var hiddenElement = document.createElement('a');                        
hiddenElement.href = 'data:text/csv,'+ encodeURI(response);
hiddenElement.target = '_blank';
hiddenElement.download = 'purchase.csv';
hiddenElement.click();

无论如何我都可以将下载的文件显示为safari的"purchase.csv"。

试试这个

var a = document.createElement('a');
a.setAttribute("href",URL);
a.setAttribute("target", "_blank");
var dispatch = document.createEvent("HTMLEvents");
dispatch.initEvent("click", true, true);
a.dispatchEvent(dispatch);
return false;

如果数据是LOCAL - Easy!

我们只用window.URL.createObjectURL()。让我们设置一些全局变量…

//var response = Already defined by OP!  Not sure what it is, but it's data to save.
var mimetype = "text/csv";
var filename = "purchase.csv";

现在我们通过type参数设置标题为window.URL.createObjectURL()

a.href = window.URL.createObjectURL(new Blob([response], {
    encoding: "UTF-8",
    type: mimetype + ";charset=UTF-8",
}));

如果数据在WEB上——仍然很容易,只是更努力!

我们可以通过XMLHTTPRequest()下载文件数据,window.URL.createObjectURL()将数据转换为具有MIME类型头的blob类型,然后正常进行设置a.download = filename;a.click();

一个抽象函数,用于直接下载文件数据到JavaScript环境…

function load(url, callback) {
  var xhr = new XMLHTTPRequest();
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) callback(xhr.responseText);
  };
  xhr.open("GET", url, true);
}

然后下载数据,建立链接,然后点击:

load("site.com/t.txt", function (contents) {
    var a = window.document.createElement('a');
    a.href = window.URL.createObjectURL(new Blob([response], {
        encoding: "UTF-8",
        type: mimetype + ";charset=UTF-8",
    }));
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    a.remove();
});