【问题标题】:Creating csv file offline (client-side) in Internet Explorer在 Internet Explorer 中离线创建 csv 文件(客户端)
【发布时间】:2012-11-20 00:34:31
【问题描述】:

有没有办法使用纯 JavaScript(离线、本地)创建 CSV 文件并将该文件下载到本地文件系统?该方法应该适用于 IE9 或更低版本。

我尝试过 downloadify,但跨域问题阻止了我在本地使用它。我还尝试创建一个 Base64 编码的字符串并发出一个 text/csv 数据 URI,但 IE 似乎不支持该特定情况的数据 URI。

【问题讨论】:

  • 您可以在 IE 的客户端 VBScript 中执行此操作。不过,需要更改安全设置以允许这样做。
  • 请看一下我的回答:stackoverflow.com/a/9686960/1169519.
  • @Teemu 我明天一定会试一试,看起来通过一点浏览器/功能检测我将能够同时使用 HTML5 文件 api 和 HTA 来实现跨浏览器兼容本地应用!

标签: javascript internet-explorer csv


【解决方案1】:

如果你想用正确的 utf8 在 excel 2013 中打开 csv,你应该像这样将 utf8 bom 添加到 dinesh ygv 代码中:

<a id="export" class="myButton" download="" href="#">export</a>
<script>
    function createDownloadLink(anchorSelector, str, fileName){
        if(window.navigator.msSaveOrOpenBlob) {
            var fileData = ['\ufeff'+str];
            blobObject = new Blob(fileData);
            $(anchorSelector).click(function(){
                window.navigator.msSaveOrOpenBlob(blobObject, fileName);
            });
        } else {
            var url = "data:text/plain;charset=utf-8,%EF%BB%BF" + encodeURIComponent(str);
            $(anchorSelector).attr("download", fileName);
            $(anchorSelector).attr("href", url);
        }
    }

    $(function () {
        var str = "hi,file";
        createDownloadLink("#export",str,"file.txt");
    });

</script>

【讨论】:

  • 谢谢 Gergo,这拯救了我的一天。
【解决方案2】:

以下方法适用于 IE11+、Firefox 25+ 和 Chrome 30+:

<a id="export" class="myButton" download="" href="#">export</a>
<script>
    function createDownloadLink(anchorSelector, str, fileName){
        if(window.navigator.msSaveOrOpenBlob) {
            var fileData = [str];
            blobObject = new Blob(fileData);
            $(anchorSelector).click(function(){
                window.navigator.msSaveOrOpenBlob(blobObject, fileName);
            });
        } else {
            var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str);
            $(anchorSelector).attr("download", fileName);
            $(anchorSelector).attr("href", url);
        }
    }

    $(function () {
        var str = "hi,file";
        createDownloadLink("#export",str,"file.txt");
    });

</script>

查看实际操作:JS Fiddle

Firefox 和 Chrome 支持导航的数据 URI,它允许我们通过导航到数据 URI 来创建文件,而 IE 出于安全目的不支持它。

另一方面,IE 有用于保存 blob 的 API,可用于创建和下载文件。

【讨论】:

  • 我刚刚在 IE 11 上对其进行了测试,但它无法正常工作。 Chrome 和 Firefox 工作
  • IE11 的新更新可能禁止从 IFrame 保存 Blob,而 JSFiddle 通过 iframe 运行页面。但是,这仍然适用于普通页面。在此处查看上述示例的 JSFiddle 演示页面:jsfiddle.net/Kg7eA/show
  • stackoverflow.com/questions/21893463/… 它在 IE 上运行良好。只需使用 .csv 扩展名重命名文件并将格式化的 csv 数据推送到其中。我正在认真考虑告诉我的客户我的先决条件是没有 IE
【解决方案3】:

出于安全原因,不可以,不能在本地创建文件并将其保存到用户的文件系统。 JavaScript 根本不允许这样做。该文件需要在服务器端创建,用户需要下载它。

编辑:实际上,您可以使用HTML5 访问本地文件系统,但它显示为IE9 doesn't support the File API

【讨论】:

    【解决方案4】:

    对于非 IE 浏览器,您可以使用 data 链接,然后对于 Internet Explorer 使用 document.execCommand 回退到 IFrame

    我在这里有更多详细信息: https://stackoverflow.com/a/26003382/378151

    我已经在 IE9-IE11 上测试过了。不知道下面的兼容性是什么,好像no one else really knows either。如果我猜的话,我敢打赌 IE 8 支持这一点,而 IE 6 和 7 就是它变得脆弱的地方。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多