大约2个月前,它运行良好,突然间Firefox除了第一行之外什么都不喜欢。但是,在调试代码时,data变量包含完整的CSV文档。但是一旦下载了文件,我只会得到第一行。这在Chrome中有效,我发现它曾经在两者中都能正常工作。

关于如何解决此问题的任何建议?

以下是我的导出脚本。

PerformanceTableController.prototype.exportSplitTimes = function () {
    var resultListId,
        resultList,
        columnId,
        csv = [],
        csvContent,
        row,
        i, l,
        filename,
        data,
        link;

    for (resultListId in this.raceData.resultLists) {
        if (this.raceData.resultLists.hasOwnProperty(resultListId)) {
            resultList = this.raceData.resultLists[resultListId];

            csv.push(this.getCSVClassTitle(resultList));
            csv.push(this.getCSVColumnHeaders());

            for (i = 0, l = resultList.performanceList().length; i < l; i += 1) {
                row = [];

                for (columnId in resultList.performanceList()[i]) {
                    if (resultList.performanceList()[i].hasOwnProperty(columnId)) {
                        if (resultList.performanceList()[i][columnId].value !== undefined) {
                            row.push(resultList.performanceList()[i][columnId].value);
                        }
                    }
                }

                csv.push(row.join(","));
            }
            console.log(csv);
        }
    }

    if (csv.length === 0) {
        return;
    }

    filename = this.raceData.race.event.name + ' - ' + this.raceData.race.name + '.csv';

    csvContent = csv.join("\n");
    if (!csvContent.match(/^data:text\/csv/i)) {
        csvContent = 'data:text/csv;charset=utf-8,' + '\uFEFF' + csvContent;
    }
    data = encodeURI(csvContent);

    link = document.createElement('a');
    link.setAttribute('href', csvContent);
    link.setAttribute('download', filename);
    link.style.display = 'none';
    // Without this line, Firefox is not able to open the CSV
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
};

最佳答案

Firefox对URI中设置的字符比对chrome更挑剔。某些字符(例如#)被保留,如果您的数据包含其中之一,则文件下载将失败。

您已经调用了encodeURI,但是您对完整的URI进行了调用,同时应保持 header 为未编码状态。

所以改变csvContent = 'data:text/csv;charset=utf-8,' + '\uFEFF' + csvContent;csvContent = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csvContent);并删除以后出现的encodeURI(csvContent)应该可以解决您的问题。

关于javascript - 在Firefox中导出javascript生成的csv仅导出第一行,在chrome中可以正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39846565/

10-12 13:01