2017-10-18 98 views
1

我有一个网页,其中有一个按钮,单击它时会生成(通过从json进行转换)csv文件,该文件由浏览器下载。它基本上使用了这个jsfiddle的逻辑。这一切都适用于Chrome,但在IE中,没有任何反应。如何使用JS(Internet Explorer)以编程方式下载文件

var uri = 'data:text/csv;charset=utf-8,' + escape(CSV); 

    // Now the little tricky part. 
    // you can use either>> window.open(uri); 
    // but this will not work in some browsers 
    // or you will not get the correct file extension  

    //this trick will generate a temp <a /> tag 
    var link = document.createElement("a");  
    link.href = uri; 

    //set the visibility hidden so it will not effect on your web-layout 
    link.style = "visibility:hidden"; 
    link.download = fileName + ".csv"; 

    //this part will append the anchor tag and remove it after automatic click 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 

问题似乎是在Internet Explorer中不存在锚标记的下载属性。我一直在看很多文章和SO帖子,但我还没有找到一个可以在页面中使用的连贯解决方案。

如何在IE中实现jsfiddle的代码?

+0

这可能有助于列出您正在测试的IE版本以及异常情况。 – Marquis

+0

对不起,实际上我以后试过的东西返回了一个运行时异常。我最初使用的代码(类似于jsfiddle)在单击按钮时没有做任何事情,但在Chrome中,文件下载并且您可以选择打开它。这是在IE 11中。 – loremIpsum1771

回答

2

这是我过去使用过的。这处理IE和非IE。

  var filename = "file.txt"; 
      var data = "some data"; 
      var blob = new Blob([data], { type: 'text/csv' }); 
      if (window.navigator.msSaveOrOpenBlob) { 
       window.navigator.msSaveBlob(blob, filename); 
      } 
      else { 
       var elem = window.document.createElement('a'); 
       elem.href = window.URL.createObjectURL(blob); 
       elem.download = filename; 
       document.body.appendChild(elem); 
       elem.click(); 
       document.body.removeChild(elem); 
      } 
+0

谢谢!这似乎工作。当用户将文件保存在文件资源管理器中时,是否有一种预设文件扩展名的方法?现在它保存为通用的“所有文件”类型。 – loremIpsum1771

+0

Nvm,我已经将“.csv”扩展名连接到一个包含文件名的变量,但是我忘记了将您使用的扩展名替换为我的。 – loremIpsum1771

相关问题