window.URL.createObjectURL Blob URL无法在Microsoft IE和Edge中打开

本文转载,仅作收藏:https://www.51-n.com/t-4535-1-1.html

window.URL.createObjectURL()可以直接生成blob:开头的链接,该链接产生于浏览器端,不会占用服务器资源。
window.URL.createObjectURL()在IE10, IE11以及Microsoft Edge中生成的blob:链接,你不能把它加到一个<a>节点上,也不能直接在浏览器地址栏打开访问,并且得到“Error: 拒绝访问。”错误。open links made by window.URL.createObjectURL in IE/Edge这样的提问到处都是,IE9根本不支持window.URL.createObjectURL创建Blob URLs就更惨了。
Microsoft Internet Explorer / Microsoft Edge和高大上的Google Chrome / Mozilla Firefox对于window.URL.createObjectURL创建Blob链接最直观的区别在于得到的blob:链接形式不一样,分别在微软浏览器和标准浏览器中运行以下代码,得到两种Blob链接形式,第一种为chrome和firefox生成的带有当前域名的标准blob:链接形式,第二种为Microsoft IE和Microsoft Edge生成的不带域名的blob:链接。可以通过window.URL.createObjectURL(new Blob()) . indexOf(location.host) < 0来检测是否是IE或早期生成Object URL不带域名的Edge。如果表达式返回true则时IE或Edge旧版本。

所以应该这么区分:

if('msSaveOrOpenBlob' in navigator){
                        window.navigator.msSaveOrOpenBlob(new Blob([data]), this.chooseMenuName+'.csv');
                    }else{
                        let url = window.URL.createObjectURL(new Blob([data]));
                        let link = document.createElement('a');
                        link.style.display = 'none';
                        link.href = url;
                        link.setAttribute('download',this.chooseMenuName+'.csv');
                        document.body.appendChild(link);
                        link.click()
                    }

猜你喜欢

转载自blog.csdn.net/u013131203/article/details/80894440