JS - CSV URL.createObjectURL(blob)在Firefox中不起作用

时间:2017-11-29 08:34:28

标签: javascript jquery firefox jsgrid

我正在从JSON生成CSV。一切正常,直到需要下载浏览器文件中缓存的时间为止。我测试过Chrome,Safari,IE,Edge和Firefox。在所有浏览器中,只有Firefox不下载该文件。我使用以下代码:

$(document).ready(function () {

    function JSONToCSV(JSONData, JSONHeader, PageName) {
        var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
        var arrHeader = typeof JSONHeader != 'object' ? JSON.parse(JSONHeader) : JSONHeader;

        var CSV = '';

        // ADD Headers
        var row = "";
        for (var i = 0; i < arrHeader.length; i++) {
            row += '"' + arrHeader[i].title + '",';
        }
        row = row.slice(0, -1);
        CSV += row + '\r\n';

        // ADD Data
        for (var i = 0; i < arrData.length; i++) {
            var row = "";
            for (var index in arrData[i]) {
                if (index == "action_date") {
                    row += '"' + moment(arrData[i][index]).format("DD/MM/YYYY HH:mm:ss") + '",';
                }
                else {
                    row += '"' + arrData[i][index] + '",';
                }
            }
            row = row.slice(0, -1);
            CSV += row + '\r\n';
        }

        var FileName = PageName + "." + moment().format('DDMMYYYY') + ".csv";
        var blob = new Blob([CSV], { type: 'text/csv;charset=utf-8;' });
        if (navigator.msSaveBlob) {
            navigator.msSaveBlob(blob, FileName);
        } 
        else {
            var link = document.createElement("a");
            if (link.download !== undefined) { 
                var url = window.URL.createObjectURL(blob);
                document.body.appendChild(link);
                link.setAttribute('href', url);
                link.setAttribute('download', FileName);
                link.style.visibility = 'hidden';
                console.log(link);
                link.click();
                setTimeout(function() {
                    document.body.removeChild(link);
                    window.URL.revokeObjectURL(url);
                }, 100);            
            }
        }
    }

  $("#ExportToExcel").on('click', function (event) {
    var filename = (window.location.pathname).substr(1);
    filename = filename.substring(0, filename.indexOf('/'));
    var data = $('#jsGrid').jsGrid('option', 'data');
    var header = $('#jsGrid').jsGrid('option', 'fields');
    JSONToCSV(data, header, filename);
  });

});

我做错了什么。在所有页面上都有一个信息要么添加延迟,要么添加元素到我正在做的DOM,但仍然没有快乐。

我找到了在Firefox中运行的小提琴http://jsfiddle.net/8wos7cf8/,因此我将代码复制到我的应用程序中,完全覆盖了我写的内容,但仍然无效。我在OSX和Windows上测试了Firefox,两者都没有下载缓存文件。我需要做错事,但我看不出它是什么。

0 个答案:

没有答案