在IE11中打开由createObjectURL创建的链接

61 html javascript internet-explorer blob

为什么不能在以下演示中打开链接:http:
//html5-demos.appspot.com/static/a.download.html

您甚至无法右键单击并在新选项卡/窗口中打开它.我需要自定义浏览器中的任何设置吗?

din*_*ygv 105

此演示使用Blob URL,由于安全限制,IE不支持该URL.

IE有自己的API来创建和下载文件,这就是所谓的msSaveOrOpenBlob.

这是我的跨浏览器解决方案,适用于IE,Chrome和Firefox:

function createDownloadLink(anchorSelector, str, fileName){
    if(window.navigator.msSaveOrOpenBlob) {
        var fileData = [str];
        blobObject = new Blob(fileData);
        $(anchorSelector).click(function(){
            window.navigator.msSaveOrOpenBlob(blobObject, fileName);
            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");
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="export" class="myButton" download="" href="#">export</a>
Run Code Online (Sandbox Code Playgroud)

  • 这个小提琴不适用于ie11 (19认同)
  • JS Fiddle最近更改了其网站,以在iframe中显示结果.IE部分在iframe中不起作用.如果您在常规页面中尝试此代码,它也适用于IE 11. (6认同)
  • 我真的希望"如果愚蠢的互联网浏览器那么"的时间结束了.感谢您的提交,这对我帮助很大. (4认同)
  • 工作,欢呼.在IE11.0.9600.17843中测试过. (2认同)
  • @robert.bo.roth 不幸的是,IE 不支持内联 PDF。唯一的方法是向用户显示下载链接。PDFObject(https://pdfobject.com/) 可以检测浏览器支持并在线PDF和下载链接之间切换。 (2认同)

Sou*_*vik 35

这是将任何文件下载为blob的功能.(在IE和非IE上测试)

var download_csv_using_blob = function (file_name, content) {
    var csvData = new Blob([content], { type: 'text/csv' });
    if (window.navigator && window.navigator.msSaveOrOpenBlob) { // for IE
        window.navigator.msSaveOrOpenBlob(csvData, file_name);
    } else { // for Non-IE (chrome, firefox etc.)
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        var csvUrl = URL.createObjectURL(csvData);
        a.href =  csvUrl;
        a.download = file_name;
        a.click();
        URL.revokeObjectURL(a.href)
        a.remove();
    }
};
Run Code Online (Sandbox Code Playgroud)

注意:如果需要,请更改文件类型.

  • 在下载完成后,从URL对象释放内存也是最好的做法`URL.revokeObjectURL(a.href)` (4认同)