在 Internet Explorer 中下载动态 CSV
Downloading a Dynamic CSV in Internet Explorer
以下代码适用于FireFox和Chrome,但不适用于IE。从本质上讲,我有一个 JSON 对象,它被转换为数组,然后转换为 csv 格式,当我在 FF 或 Chrome 中单击按钮时,文件被下载或另存为窗口打开,但在 IE 中会打开一个新选项卡。在一个完美的世界中,IE是不存在的,但在现实世界中,我们必须让它工作,哈哈。
$("#csvbtn").click(function(e){
e.preventDefault();
var json_obj= JSON.parse(result);
var csv = JSON2CSV(json_obj);
window.open("data:text/csv;charset=utf-8," + escape(csv));
});
顺便说一句,我正在 Windows 11 中使用 IE 8 来测试这一点,如果这有什么不同的话。
谢谢大家!
的解决方案,以防其他人正在寻找解决方案。 现在它适用于FF,Chrome和IE
var csv = JSON2CSV(json_obj);
var blob = new Blob([csv],{type: "text/csv;charset=utf-8;"});
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, "csvname.csv")
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", "csvname.csv");
link.style = "visibility:hidden";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
现在我只需要弄清楚是否有办法弹出另存为屏幕而不是自动保存文件。如果有人知道答案,请分享。现在,我的用户将不得不使用此功能。
感谢大家的所有精彩回答,你们太棒了。
出于安全目的,Internet Explorer 不允许将数据 URI 作为可导航的内容。要了解原因,我鼓励您阅读Henning Klevjer关于该主题的简短白皮书,按数据URI进行网络钓鱼。总之,这已被证明开辟了欺骗最终用户放弃敏感信息的途径。
此外,从 MSDN 上的数据协议文档中:
出于安全原因,数据 URI 仅限于下载的资源。数据 URI 不能用于导航、脚本编写或填充框架或 iframe 元素。
老实说,将数据 URI 传递给window.open
感觉有点笨拙。相反,您应该使用 API 来处理该过程(前提是存在)。如果要在 Internet Explorer 中将文件下载到用户的计算机,请考虑使用 navigator.msSaveBlob
或 navigator.msSaveOrOpenBlob
。
例如,请考虑以下事项:
if ( window.navigator.msSaveOrOpenBlob && window.Blob ) {
var blob = new Blob( [ "A,B'nC,D" ], { type: "text/csv" } );
navigator.msSaveOrOpenBlob( blob, "strings.csv" );
}
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 动态分配GA增强型电子商务跟踪器
- onkeyup无法动态创建多个文本区域
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何使Javascript动态html表及其上的事件
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 如何使用javascript从主svg对象动态创建svg视图框
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 在POST中将html表作为csv提交
- 从CSV动态创建对象
- Highcharts从csv文件动态更新图表
- 通过PHP将动态表数据导出为CSV
- 如何将csv源文件拖放到动态图画布上
- 使用 UTF-8 和具有动态 CSV 文件名的 /uFEFF 在 JavaScript 中导出 CSV
- 在 Internet Explorer 中下载动态 CSV
- 如何在动态生成的下载链接中解析csv文件
- 如何构建动态html表单远程CSV