无论如何要下载我在Safari中的javascript中创建的csv字符串吗?
编辑:我不想(不能)在服务器上创建文件。
我有以下代码,它可以在其他浏览器上正常工作,但不适用于Safari。我能做的最好的事情是在新窗口中打开数据,但这对用户来说是一种糟糕的UI体验。
$("#csv").click(function(event) {
event.preventDefault();
navigator.sayswho = (function() {
var ua = navigator.userAgent, tem,
M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
return M[1];
})();
var download = function (content, fileName, mimeType) {
var a = document.createElement('a');
mimeType = mimeType || 'application/octet-stream';
mimeType = 'application/octet-stream';
if (navigator.msSaveBlob) { // IE10
return navigator.msSaveBlob(new Blob([content], {
type: mimeType
}), fileName);
} else if ('download' in a) { //html5 A[download]
a.href = 'data:' + mimeType + ',' + encodeURIComponent(content);
a.setAttribute('download', fileName);
document.body.appendChild(a);
setTimeout(function () {
a.click();
document.body.removeChild(a);
}, 66);
return true;
} else { //do iframe dataURL download (old ch+FF):
if (navigator.sayswho == 'Safari') {
var uri = 'data:text/csv;charset=utf-8,' + escape(content);
var link = document.createElement("a");
link.href = uri;
link.target = "_blank";
link.style = "visibility: hidden";
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
else
{
var f = document.createElement('iframe');
document.body.appendChild(f);
f.src = 'data:' + mimeType + ',' + encodeURIComponent(content);
setTimeout(function () {
document.body.removeChild(f);
}, 33333);
return true;
}
}
}
//csv_content is my string that has the csv data in it.
download(csv_content, moment().format("YYYY_MM_DD_HH_mm") + '.csv', 'text/csv');
});
在Chrome和FireFox中,它按预期工作。我使用FileSaver.js(https://stackoverflow.com/a/14858315/1758023)看到了一些答案,但评论说这不起作用(我也不能使它工作)。
答案 0 :(得分:1)
尝试使用以下js函数。
function download()
{
window.location = '<<your file name with full path>>';
//for ex. function download()
//window.location = 'mobilepayreport.xls';
}
答案 1 :(得分:0)
我也遇到过safari中的问题。您可以在safari中创建和下载csv文件。但是直到您的文件没有物理存储在任何位置,它不显示文件名并在下载弹出窗口中输入(它总是显示未知因此,我建议使用ajax将数据作为html传递到服务器端代码并创建一个文件,并且通过该调用的响应创建从服务器端代码存储的文件的链接。下载文件,然后您可以删除此文件