Javascript 在Internet Explorer中下载动态CSV

Javascript 在Internet Explorer中下载动态CSV,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,以下代码适用于FireFox和Chrome,但不适用于IE。本质上,我有一个JSON对象,它被转换为数组,然后转换为csv格式,当我在FF或Chrome中单击按钮时,文件被下载,或者“另存为”窗口打开,但在IE中会打开一个新选项卡。在一个完美的世界里IE是不存在的,但在现实世界中我们必须让它工作,哈哈 $("#csvbtn").click(function(e){ e.preventDefault(); var json_obj= JSON.parse(result);

以下代码适用于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));
});
顺便说一句,我正在Windows8中使用IE11来测试这一点,如果这有什么不同的话


谢谢大家

出于安全目的,Internet Explorer不允许将数据URI作为可导航内容。为了了解原因,我鼓励大家阅读Henning Klevjer关于该主题的简短白皮书。总之,这已被证明为最终用户提供了一条可能被欺骗而放弃敏感信息的途径

此外,从:

出于安全原因,数据URI仅限于下载的资源。数据URI不能用于导航、脚本编写或填充框架或iframe元素

老实说,将数据URI传递到
窗口.open
感觉有点不舒服。相反,您应该使用API来处理该流程(前提是存在API)。如果您想将文件下载到Internet Explorer中的用户机器上,请考虑使用./P/>

作为一个例子,考虑如下:

if(window.navigator.msSaveOrOpenBlob&&window.Blob){
var blob=新blob([“A,B\nC,D”],{type:“text/csv”});
msSaveOrOpenBlob(blob,“strings.csv”);
}

这是我的解决方案,以防其他人正在寻找解决方案。现在它可以与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);
        }           
    }
现在我只需要弄清楚是否有一种方法可以让“另存为”屏幕弹出,而不是自动保存文件。如果有人知道答案,请分享。目前,我的用户将不得不使用此功能


谢谢大家的精彩回答,你们真是太棒了。

给它一个宽度<代码>window.open('example.com','foo','width=1000')这里是打字错误还是您错过了
$
<代码>(“#csvbtn”)应该是
$(“#csvbtn”)
jQuery(“#csvbtn”)
。你的控制台怎么说?有错误吗?事实上,是“foo”让它起作用了。。。window.open需要一个windowname作为第二个参数。@user2797021是
$(“#csvbtn”)
一个
元素?我尝试了这个和以下几个其他排列,现在我只得到一个空窗口。open(“”,'Receipts.csv','width=1000','data:text/csv;charset=utf-8,+escape(csv));在这种情况下,我将如何完成下载动态csv文件?我是否还需要使用另一种技术,或者这只是微软对所有问题漏洞进行全面修复的实例之一?@user2797021 Internet Explorer支持一些API,用于将下载传递给用户;我已经更新了我的答案,包括这些。