3

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

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

4

4 回答 4

5

如果您想使用正确的 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>
于 2014-06-18T12:23:51.810 回答
1

以下方法适用于 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,可用于创建和下载文件。

于 2013-12-27T06:52:49.153 回答
0

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

编辑:实际上,您可以使用HTML5访问本地文件系统,但似乎IE9 不支持 File API

于 2012-11-20T00:38:46.483 回答
0

您可以将data链接用于非 IE 浏览器,然后回退到用于 Internet Explorer的IFramewith 。document.execCommand

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

我已经在 IE9-IE11 上测试过了。我不知道下面的兼容性是什么,而且似乎没有其他人真正知道。如果我猜的话,我敢打赌 IE 8 支持这一点,而 IE 6 和 7 就是它变得脆弱的地方。

于 2014-09-23T20:17:08.343 回答