javascript在Safari中下载csv数据

javascript在Safari中下载csv数据,javascript,csv,download,safari,Javascript,Csv,Download,Safari,有没有下载我在Safari的javascript中创建的csv字符串 编辑:我不想(无法)在服务器上创建文件 我有以下代码,它可以在其他浏览器上正常工作,但不能在safari上。我能做的最好的事情似乎就是在一个新窗口中打开数据,但这对用户来说是一个糟糕的UI体验 $("#csv").click(function(event) { event.preventDefault(); navigator.sayswho = (function() {

有没有下载我在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(),但评论说这不起作用(我也不能让它起作用)。

尝试使用以下js函数

function download()
{
    window.location = '<<your file name with full path>>';
    //for ex. function download()
    //window.location = 'mobilepayreport.xls';
}
函数下载()
{
window.location='';
//例如,函数下载()
//window.location='mobilepayreport.xls';
}

我在safari中也遇到了这个问题。您可以在safari中创建和下载csv文件。但是,在您的文件没有实际存储在任何位置之前,它不会显示文件名并在下载弹出窗口中键入(它始终显示未知)因此,我建议使用ajax在服务器端代码中以html格式传递数据,并创建一个文件,然后响应该调用,创建从服务器端代码存储的文件链接。下载该文件,然后可以删除该文件。

我没有文件,只有一个包含数据的字符串。我没有生成文件。您询问是否要下载文件。在所需位置创建一个文件,您就可以下载它了。你想在那个文件里写点什么吗??我在我的一段代码中使用了excelwriter php类。如果你愿意的话,我可以教你如何使用它。