浏览器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);
  }
相关推荐
dly_blog1 天前
Vue 响应式陷阱与解决方案(第19节)
前端·javascript·vue.js
消失的旧时光-19431 天前
401 自动刷新 Token 的完整架构设计(Dio 实战版)
开发语言·前端·javascript
console.log('npc')1 天前
Table,vue3在父组件调用子组件columns列的方法展示弹窗文件预览效果
前端·javascript·vue.js
用户47949283569151 天前
React Hooks 的“天条”:为啥绝对不能写在 if 语句里?
前端·react.js
我命由我123451 天前
SVG - SVG 引入(SVG 概述、SVG 基本使用、SVG 使用 CSS、SVG 使用 JavaScript、SVG 实例实操)
开发语言·前端·javascript·css·学习·ecmascript·学习方法
用户47949283569151 天前
给客户做私有化部署,我是如何优雅搞定 NPM 依赖管理的?
前端·后端·程序员
C_心欲无痕1 天前
vue3 - markRaw标记为非响应式对象
前端·javascript·vue.js
qingyun9891 天前
深度优先遍历:JavaScript递归查找树形数据结构中的节点标签
前端·javascript·数据结构
胡楚昊1 天前
NSSCTF动调题包通关
开发语言·javascript·算法
熬夜敲代码的小N1 天前
Vue (Official)重磅更新!Vue Language Tools 3.2功能一览!
前端·javascript·vue.js