浏览器a标签下载txt、json文件自动打开预览的问题

背景

由于浏览器的特性.txt .pdf .json 等等文件放在a标签的href属性中会被浏览器直接打开,这时可以给a添加download属性强制下载,但是当执行 跨域下载 文件时download属性就会失效。

解决办法

跨域会导致download属性失效,使用xhr下载方式。

javascript 复制代码
export default function download(url, fileName) {
    const xhr = new XMLHttpRequest()
    xhr.open('GET', url, true)
    xhr.responseType = 'blob'
    xhr.onload = () => {
      const url = window.URL.createObjectURL(xhr.response)
      createAndRemove(url, fileName)
    }
    xhr.send()
  }

  function createAndRemove(url, fileName) {
    // 创建隐藏的可下载链接
    var eleLink = document.createElement('a');
    eleLink.download = fileName;
    eleLink.style.display = 'none';
    // 下载内容转变成blob地址
    eleLink.href = url;
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    // 然后移除
    document.body.removeChild(eleLink);
  }
相关推荐
kyriewen6 小时前
手写虚拟DOM后,我反问面试官:key为什么不能用index?
前端·react.js·面试
Doris_20236 小时前
说一说ESLint+Prettier生效的原理
前端·设计模式·架构
ZC跨境爬虫6 小时前
跟着 MDN 学CSS day_21:(图像溢出控制与表单元素样式定制)
前端·javascript·css·ui·交互
卷帘依旧6 小时前
微前端解决方案-qiankun
前端
moshuying6 小时前
你做的,比汇报出来的多得多
前端
shuye2166 小时前
google chrome 离线下载地址
前端·chrome
yqcoder7 小时前
闭包是什么?优缺点、怎么防内存泄漏?
前端·http
riuphan7 小时前
JavaScript 中的 this 关键字
javascript
掰头战士7 小时前
五分钟带你深入了解 this
javascript
lichenyang4537 小时前
鸿蒙 ArkUI 组件基础复盘:从两个 UI 卡片回到 ComponentV2、状态管理和组件分层
前端