js前端解决浏览器下载兼容性问题
问题描述:js文件中有一个excel二进制流data,是后台传来的,前端负责将它下载下来,保存为 .xlsx 文件。在chrome和火狐上都没问题,偏偏ie11就是不行。
解决途径:通过google搜索,查到github和stackoverflow上有相似问题,然后下载github的代码来看,然后解决。
判断浏览器类型:
var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0; if (!!window.ActiveXObject || "ActiveXObject" in window || Sys.ie) {//Js判断为IE浏览器
非IE浏览器下载写法:
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,charset=UTF-8"});//"text/plain;charset=utf-8" var objectUrl = window.URL.createObjectURL(blob); var a = document.getElementById('downList'); a.href = objectUrl; a.download = 'user_list'; a.click();
兼容IE下载:
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,charset=UTF-8"}); saveAs(blob, "report.xlsx");
使用到了一个js文件:FileSaver.min.js
相关链接:
https://github.com/SheetJS/js-xlsx
https://github.com/eligrey/FileSaver.js
// var a = document.createElement("a"); // document.body.appendChild(a); // //a.style = "display: none"; // var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}); // var objectUrl = window.URL.createObjectURL(blob); // a.href = objectUrl; // a.download = 'templdate'; // a.click(); // setTimeout(function () { // document.body.removeChild(a); // window.URL.revokeObjectURL(objectUrl); // }, 10000);
世上无难事,只要肯登攀。