用于下载csv文件的Javascript在FireFox中不起作用

mai*_*_73 1 javascript csv

我有一个用于转换数据并将其另存为csv文件的JavaScript。看起来像这样:

function downloadCSV(args) {
    var data, filename, link;
    var type = args.type;
    var fields = Object.keys(json_for_export[0]);
    var csv = json_for_export.map(function(row){
        return fields.map(function(fieldName){
            return '"' + (row[fieldName] || '') + '"';
            });
        });
   csv.unshift(fields);
   csv = csv.join('\r\n')
   if (csv == null) return;
   filename = 'csv' + '_' + args.filename || 'export.csv';
   if (!csv.match(/^data:text\/csv/i)) {
            csv = 'data:text/csv;charset=utf-8,' + '\uFEFF' + csv;
   }
   data = encodeURI(csv);
   link = document.createElement('a');
   link.setAttribute('href', data);
   link.setAttribute('download', filename);
   link.click();
}
Run Code Online (Sandbox Code Playgroud)

它可以在Chrome浏览器中正常运行,但不能在Firefox中运行。是什么原因造成的?检查控制台,然后将数据格式化为csv类型。

Gil*_*tzi 5

您需要a先将元素附加到DOM上,然后再单击它:

document.body.appendChild(link);
link.click();
Run Code Online (Sandbox Code Playgroud)

之后,您可以立即将其删除:

document.body.removeChild(link);
Run Code Online (Sandbox Code Playgroud)