接口调用返回的blob,下载文件,谷歌上可以,火狐无法下载

如题,axios接口调用,用生成的blob对象经过如下处理

 var blob = new Blob([data])
 var downloadElement = document.createElement('a');
 // var downloadElement = document.getElementById('download')
 var href = window.URL.createObjectURL(blob); //创建下载的链接
 downloadElement.href = href;
 downloadElement.download = '用户数据.xlsx'; //下载后文件名
 document.body.appendChild(downloadElement);
 downloadElement.click(); //点击下载
 document.body.removeChild(downloadElement); //下载完成移除元素
 window.URL.revokeObjectURL(href); //释放掉blob对象

此时谷歌左下角会自动弹出文件下载,在火狐上的表现如下图
Snipaste_2020-03-17_11-10-43.png

火狐是74.0版本

这个弹窗闪一下就没了,问题出在那?我看有人说不要创建a标签,在页面上初始化一个a标签隐藏,但是也没用.谁能解答下疑问感谢,百思不得其解

阅读 3.8k
1 个回答
 document.body.removeChild(downloadElement); //下载完成移除元素
 window.URL.revokeObjectURL(href); //释放掉blob对象

改成异步的呢?我之前同步的是没有问题的。

    setTimeout(v=>{
         document.body.removeChild(downloadElement); //下载完成移除元素
         window.URL.revokeObjectURL(href); //释放掉blob对象
    })

或者别释放 window.URL.revokeObjectURL(href); //释放掉blob对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题