老ie9浏览器不兼容window.atob

老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有,里面内容为空,后来看了下编码

img

base64解码的后的内容和atob 解码后的内容不同,怀疑有乱码,然后又从网上找到了

var binaryString = new TextDecoder('utf-8').decode(new Uint8Array(new Base64().decode(base64String)));

这个方法,但是new TextDecode和new Uint8Array 2个无法引用,其实也不是无法引用而是我压根不知道他是存在那个依赖上面

然后我又找别的方法在别的论坛上找到了这个

img


然后我把base64-polyfill.js这个js也引入到里面,

img

加载的时候也是可以正常加载的,但是一在ie上测试就不行
这行代码报错

img

    var byteCharacters = window.atob(base64Data)

有遇到相同问题的,麻烦知道一下,谢谢

atob、Blob都至少要ie10呢,试试创建个element然后放入文件url,触发点击方式

img