老ie9浏览器不兼容window.atob,有别的方法可以兼容的吗
直接上代码
function (base64Data) {
debugger
//var byteCharacters =new TextDecoder('utf-8').decode(new Uint8Array(Base64.decode(base64Data)));
//var byteCharacters = Base64._utf8_decode(base64Data)
//var byteCharacters = Base64.decode(base64Data)
var byteCharacters = window.atob(base64Data)
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], { type: 'application/pdf' });
debugger
if(window.navigator.msSaveBlob){
console.log("支持msSaveBlob方法")
window.navigator.msSaveBlob(blob, "组合贷款通知单");
}else{
// 创建一个隐藏的链接,并设置下载属性
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = "组合贷款通知单";
// 模拟点击链接进行下载
link.click();
// 清理临时 URL 对象
URL.revokeObjectURL(link.href);
}
}
如上述代码所以,在开发老项目的时候遇到一个问题,后端返回的文件流,前段拿到想利用 window.atob的组件直接保存到本地的,
前面测试的蛮顺利,但是后面放到测试环境一点击就报错,后来查阅资料,发现ie9是不支持atob 的,
后面又查了下引用第三方的Base64,
但是引用之后,发现文件可以下载但是为空,就是pdf有,里面内容为空,后来看了下编码
base64解码的后的内容和atob 解码后的内容不同,怀疑有乱码,然后又从网上找到了
var binaryString = new TextDecoder('utf-8').decode(new Uint8Array(new Base64().decode(base64String)));
这个方法,但是new TextDecode和new Uint8Array 2个无法引用,其实也不是无法引用而是我压根不知道他是存在那个依赖上面
然后我又找别的方法在别的论坛上找到了这个
加载的时候也是可以正常加载的,但是一在ie上测试就不行
这行代码报错
var byteCharacters = window.atob(base64Data)
有遇到相同问题的,麻烦知道一下,谢谢
atob、Blob都至少要ie10呢,试试创建个element然后放入文件url,触发点击方式