有没有办法使用纯 JavaScript(离线,本地)创建 CSV 文件并将该文件下载到本地文件系统?该方法应该适用于 IE9 或更低版本。
我尝试过 downloadify,但跨域问题阻止了我在本地使用它。我还尝试创建一个 Base64 编码的字符串并发出一个 text/csv 数据 URI,但 IE 似乎不支持该特定情况的数据 URI。
有没有办法使用纯 JavaScript(离线,本地)创建 CSV 文件并将该文件下载到本地文件系统?该方法应该适用于 IE9 或更低版本。
我尝试过 downloadify,但跨域问题阻止了我在本地使用它。我还尝试创建一个 Base64 编码的字符串并发出一个 text/csv 数据 URI,但 IE 似乎不支持该特定情况的数据 URI。
如果您想使用正确的 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>
以下方法适用于 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,可用于创建和下载文件。
出于安全原因,不,不可能在本地创建文件并将其保存到用户的文件系统。JavaScript 根本不允许这样做。该文件需要在服务器端创建,用户需要下载它。
编辑:实际上,您可以使用HTML5访问本地文件系统,但似乎IE9 不支持 File API。
您可以将data
链接用于非 IE 浏览器,然后回退到用于 Internet Explorer的IFrame
with 。document.execCommand
我在这里有更多详细信息: https ://stackoverflow.com/a/26003382/378151
我已经在 IE9-IE11 上测试过了。我不知道下面的兼容性是什么,而且似乎没有其他人真正知道。如果我猜的话,我敢打赌 IE 8 支持这一点,而 IE 6 和 7 就是它变得脆弱的地方。