项目场景:
用vue项目做一个后台管理,要做到兼容谷歌浏览器及IE浏览器,谷歌浏览器问题很少,但是由于IE浏览器比较老,涉及到的兼容问题也比较多。
问题描述:
在详情页面中有个下载按钮,下载word、excle文档类的东西,谷歌浏览器下载都没问题,但是IE浏览器下载不下来,都是破损文件。
原因分析:
因为IE浏览器兼容问题不是很友好,版本也比较老。
解决方案:
思路:
下载的时候判断一下是IE浏览器还是谷歌其他浏览器。
blob 构造函数可以直接在客户端上创建和操作 Blob. msSaveBlob允许用户在客户端上保存文件.
如果是IE浏览器的话,用window.navigator.msSaveBlob进行判断,借助AJAX原生的方法进行下载,如果是谷歌其他浏览器就创建a标签,设置下载的href链接,自调用click事件。
实现:
// 下载
downLoadFile () {
if (window.navigator.msSaveBlob) {
try {
let xhr = new XMLHttpRequest()
xhr.open('get', 请求的url, true)
xhr.responseType = 'blob' // 返回类型blob
// 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
xhr.onload = function () {
// 请求完成
if (this.status === 200) {
let blob = this.response
window.navigator.msSaveBlob(blob, '下载文件的名字')
}
}
xhr.send()
} catch (e) {
console.log(e)
}
} else {
var a = document.createElement('a')
a.download = '下载的名字'
a.href = '跳转的链接'
a.click()
}
}