在Safari中使用blob保存CSV文件

Cal*_*eng 2 javascript csv safari jquery

我在下面有代码生成下载链接,以便用户可以在我的网站上下载.csv文件.

var link = document.createElement("a");
link.id = "csvDwnLink";
window.URL = window.URL || window.webkitURL;

var csv = "\ufeff" + CSV,
    blob = new window.Blob([csv], {type: 'text/csv, charset=UTF-8'}),
    csvUrl = window.URL.createObjectURL(blob),
    filename = 'export.csv';

$("#csvDwnLink").attr({'download': filename, 'href': csvUrl});
$('#csvDwnLink')[0].click();
document.body.removeChild(link);
Run Code Online (Sandbox Code Playgroud)

我希望用户可以点击下载链接csvUrl来下载cvs文件.
它适用于铬.但是,当我使用Safari单击相同的链接时,它将直接显示选项卡中csv文件的内容.

如何解决此问题,以便safari将显示保存文件窗口,用户可以选择要保存文件的路径,而不是在单击下载链接时直接显示cvs文件的内容?
希望有人可以给我一些建议或替代方法.
提前致谢!

==更新==
在这里找到解决
方案解决方案1, 解决方案2

代码将是:

var link = document.createElement("a");
link.id = "csvDwnLink";

document.body.appendChild(link);
window.URL = window.URL || window.webkitURL;
var csv = "\ufeff" + CSV,
    csvData = 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(csv),
    filename = 'filename.csv';
$("#csvDwnLink").attr({'download': filename, 'href': csvData});
$('#csvDwnLink')[0].click();
document.body.removeChild(link);
Run Code Online (Sandbox Code Playgroud)

Safari将为用户下载该文件,但文件名unknown可能是因为Safari不支持'download'属性,raphael如上所述.

Rap*_*ler 9

我做了一个快速的研究 - 我看起来Safari不支持你想要实现的目标.

您的解决方案在Chrome(和Firefox)中运行的原因是它们支持下载属性 - Safari尚未支持.

  • 并且它似乎不会在不久的将来得到修复:https://bugs.webkit.org/show_bug.cgi?id = 102914有人使用webkit技能来编写补丁吗? (2认同)