IE11浏览器下载文件报错拒绝访问,兼容性处理

原始代码,是先创建一个a标签,然后在生成一个url地址,在设置下载属性,添加到DOM节点中,操作点击事件,完了之后在移除a标签节点。

核心代码如下:

   const blob = new Blob([res.data]);
   const a = document.createElement('a');
   a.href = window.URL.createObjectURL(blob);
   a.download = fileName;
   document.body.appendChild(a);
   a.click();
   document.body.removeChild(a);

使用IE11浏览器导出报错拒绝访问如下


image.png

在控制台看了一下生成的节点,发现a标签已经生成了,却发现a标签的下载属性未添加, 未实现点击这一动作。

<a href="blob:5567C153-E677-4F45-9DB8-18C407E00880"></a>

使用 window.navigator.msSaveBlob(blob, defaultName) 代码,去保存下载文件。

解决兼容性处理代码如下

        exportTable () {
            this.loading = true;
            let qusMethod = this.method == 'get' ? 'getDownAjax' : 'postAjax';  // 请求方式判断(只考虑get和post两种方式)
            http[qusMethod](
                this.url,
                this.params,
                { responseType: 'blob'}
            ).then(res => {
                if(res.status === 200) {
                    this.loading = false;
                    const blob = new Blob([res.data]);
                    let ext = this.ext  || 'xlsx';
                    let fileName = `${this.filename}-${moment().format('YYYYMMDDHHmmss')}.${ext}`;
                    // ie兼容处理
                    if (window.navigator.msSaveBlob) {
                        window.navigator.msSaveBlob(blob, fileName);
                    } else {
                        const a = document.createElement('a');
                        a.href = window.URL.createObjectURL(blob);
                        a.download = fileName;
                        document.body.appendChild(a);
                        a.click();
                        document.body.removeChild(a);
                    }
                } else {
                    this.$message.error("请刷新页面重试!");
                }

            }).catch(error => {
                console.log(error);
            })
        }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript代码嵌入网页的方法 JavaScript代码只有嵌入网页,才能在用户浏览网页时运行。 网页中嵌...
    许先生__阅读 1,169评论 0 1
  • 1. 介绍 浏览器可能是最广泛使用的软件。本书将介绍浏览器的工作原理。我们将看到,当你在地址栏中输入google....
    康斌阅读 2,046评论 7 18
  • 简介网络浏览器很可能是使用最广的软件。在这篇入门文章中,我将会介绍它们的幕后工作原理。我们会了解到,从您在地址栏输...
    wengjq阅读 2,060评论 2 15
  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 1,319评论 0 5
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,605评论 0 7