Javascript 创建CSV并使用不在IE、Chrome中工作的JS打开

Javascript 创建CSV并使用不在IE、Chrome中工作的JS打开,javascript,internet-explorer,google-chrome,csv,cross-browser,Javascript,Internet Explorer,Google Chrome,Csv,Cross Browser,我通过提供文件名、逗号分隔的标题和数据键值对象,从js对象创建CSV文件。然而,当我去下载文件时,我面临以下问题: Chrome:文件下载,但文件未命名且没有文件扩展名 IE:文件甚至不下载 以下是我的JS代码: function createCSV(filename, headers, data) { var csvContent = "data:text/csv;charset=utf-8," + headers; data.forEach(function(d, in

我通过提供文件名、逗号分隔的标题和数据键值对象,从js对象创建CSV文件。然而,当我去下载文件时,我面临以下问题:

  • Chrome:文件下载,但文件未命名且没有文件扩展名
  • IE:文件甚至不下载
以下是我的JS代码:

function createCSV(filename, headers, data) {

    var csvContent = "data:text/csv;charset=utf-8," + headers;
    data.forEach(function(d, index) {

        var dataString = "";
        var i = 0;

        for ( var key in d) {

            if (d[key] == 'null')
                dataString += '\"\"';
            else
                dataString += "\"=\"\"" + d[key] + "\"\"\"";

            if (i < Object.keys(d).length - 1)
                dataString += ",";

            i++;
        }

        if (index < data.length)
        csvContent += "\n";

        csvContent += dataString;
    });

    var filename = filename + ".csv"

    var link = document.createElement("a");
    link.setAttribute("href", encodeURI(csvContent));
    link.setAttribute("download", filename);
    actuateLink(link);
}

function actuateLink(link)
{
   var allowDefaultAction = true;

   if (link.click)
   {
      link.click();
      return;
   }
   else if (document.createEvent)
   {
      var e = document.createEvent('MouseEvents');
      e.initEvent('click', true, true);
      allowDefaultAction = link.dispatchEvent(e);           
   }

   if (allowDefaultAction)       
   {
      var f = document.createElement('form');
      f.action = link.href;
      document.body.appendChild(f);
      f.submit();
   }
}
函数createCSV(文件名、标题、数据){
var csvContent=“数据:文本/csv;字符集=utf-8,”+标题;
data.forEach(函数(d,索引){
var dataString=“”;
var i=0;
for(变量键在d中){
如果(d[键]='null')
数据字符串+='\'\';
其他的
数据字符串+=“\”=“\”\”+d[键]+“\”\”\”;
如果(i<对象键(d).长度-1)
数据字符串+=“,”;
i++;
}
if(索引<数据长度)
csvContent+=“\n”;
csvContent+=数据字符串;
});
var filename=filename+“.csv”
var link=document.createElement(“a”);
link.setAttribute(“href”,encodeURI(csvContent));
link.setAttribute(“下载”,文件名);
实际链接(链接);
}
函数ActualLink(链接)
{
var allowDefaultAction=true;
如果(单击链接)
{
link.click();
返回;
}
else if(document.createEvent)
{
var e=document.createEvent('MouseEvents');
e、 initEvent('click',true,true);
allowDefaultAction=link.dispatchEvent(e);
}
如果(allowDefaultAction)
{
var f=document.createElement('form');
f、 action=link.href;
文件.正文.附件(f);
f、 提交();
}
}

您可以通过建议的解决方案来解决这个问题,至少对于Chrome来说是这样


但是,我不知道Internet Explorer或任何其他浏览器的答案。

您可以用建议的答案来解决这个问题,至少对于Chrome是这样


但是,我不知道Internet Explorer或任何其他浏览器的答案。

您可以用建议的答案来解决这个问题,至少对于Chrome是这样


但是,我不知道Internet Explorer或任何其他浏览器的答案。

您可以用建议的答案来解决这个问题,至少对于Chrome是这样


但是,我不知道Internet Explorer或任何其他浏览器的答案。

请参阅下面特定浏览器的修复程序:

function downloadFile(filename, csvContent) {
var blob = new Blob([csvContent]);
var needsClick = true;
var browser = "";
if ( window.webkitURL ) {
    browser = "CHROME";
    var link = document.createElement("a");
    link.setAttribute("href", "data:text/csv;charset=utf-8," + encodeURI(csvContent));
    link.setAttribute("target", "_blank");
    link.setAttribute("download", filename);
    link.click();
} else {
    if (document.createEvent) {
        browser = "FIREFOX";
        var link = document.createElement("a");
        link.setAttribute("href", encodeURI("data:text/csv;charset=utf-8," + csvContent));
        link.setAttribute("download", filename);
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        needsClick = link.dispatchEvent(e);
    }
    if(needsClick) {
        if(window.navigator.msSaveBlob != undefined){
            browser = "IE";
            window.navigator.msSaveBlob(blob, filename);
        }
    }
}
console.log(browser); }

请参阅下面特定浏览器的修复程序:

function downloadFile(filename, csvContent) {
var blob = new Blob([csvContent]);
var needsClick = true;
var browser = "";
if ( window.webkitURL ) {
    browser = "CHROME";
    var link = document.createElement("a");
    link.setAttribute("href", "data:text/csv;charset=utf-8," + encodeURI(csvContent));
    link.setAttribute("target", "_blank");
    link.setAttribute("download", filename);
    link.click();
} else {
    if (document.createEvent) {
        browser = "FIREFOX";
        var link = document.createElement("a");
        link.setAttribute("href", encodeURI("data:text/csv;charset=utf-8," + csvContent));
        link.setAttribute("download", filename);
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        needsClick = link.dispatchEvent(e);
    }
    if(needsClick) {
        if(window.navigator.msSaveBlob != undefined){
            browser = "IE";
            window.navigator.msSaveBlob(blob, filename);
        }
    }
}
console.log(browser); }

请参阅下面特定浏览器的修复程序:

function downloadFile(filename, csvContent) {
var blob = new Blob([csvContent]);
var needsClick = true;
var browser = "";
if ( window.webkitURL ) {
    browser = "CHROME";
    var link = document.createElement("a");
    link.setAttribute("href", "data:text/csv;charset=utf-8," + encodeURI(csvContent));
    link.setAttribute("target", "_blank");
    link.setAttribute("download", filename);
    link.click();
} else {
    if (document.createEvent) {
        browser = "FIREFOX";
        var link = document.createElement("a");
        link.setAttribute("href", encodeURI("data:text/csv;charset=utf-8," + csvContent));
        link.setAttribute("download", filename);
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        needsClick = link.dispatchEvent(e);
    }
    if(needsClick) {
        if(window.navigator.msSaveBlob != undefined){
            browser = "IE";
            window.navigator.msSaveBlob(blob, filename);
        }
    }
}
console.log(browser); }

请参阅下面特定浏览器的修复程序:

function downloadFile(filename, csvContent) {
var blob = new Blob([csvContent]);
var needsClick = true;
var browser = "";
if ( window.webkitURL ) {
    browser = "CHROME";
    var link = document.createElement("a");
    link.setAttribute("href", "data:text/csv;charset=utf-8," + encodeURI(csvContent));
    link.setAttribute("target", "_blank");
    link.setAttribute("download", filename);
    link.click();
} else {
    if (document.createEvent) {
        browser = "FIREFOX";
        var link = document.createElement("a");
        link.setAttribute("href", encodeURI("data:text/csv;charset=utf-8," + csvContent));
        link.setAttribute("download", filename);
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        needsClick = link.dispatchEvent(e);
    }
    if(needsClick) {
        if(window.navigator.msSaveBlob != undefined){
            browser = "IE";
            window.navigator.msSaveBlob(blob, filename);
        }
    }
}
console.log(browser); }

Chrome下的函数不起作用,Firefox将获得window.navigator.msSaveBlob未定义错误。所以稍微更新一下,使Chrome下的所有works.function都不起作用,Firefox将得到window.navigator.msSaveBlob未定义错误。所以稍微更新一下,使Chrome下的所有works.function都不起作用,Firefox将得到window.navigator.msSaveBlob未定义错误。所以稍微更新一下,使Chrome下的所有works.function都不起作用,Firefox将得到window.navigator.msSaveBlob未定义错误。所以,更新一点,使所有的工作。