浏览器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);
  }
相关推荐
宿6742 小时前
vue3-包管理器
前端·vue.js
@PHARAOH2 小时前
WHAT - Remix 入门和基本实践:理解两套产物
前端·remix
mayaairi3 小时前
Vue2 生命周期完全指南:从创建到销毁的8个钩子函数
前端·javascript·vue.js
研☆香3 小时前
一个简单的气泡弹窗制作
javascript
xy34533 小时前
axure9.0 如何打造一个计时器(简单版)
前端·ui·html·axure·原型·产品设计
大模型丫丫4 小时前
用 TypeScript、NestJS 和 LangGraph 搭建一个可控的 AI Agent
javascript·人工智能·typescript
IMPYLH4 小时前
HTML 的 <pre> 元素
前端·javascript·html
shmily麻瓜小菜鸡4 小时前
JavaScript / TypeScript 易踩坑知识点 —— 异步编程类
开发语言·javascript·typescript
tsumikistep5 小时前
【前端】Vue + Axios 跨域问题实战:7070 代理转发 8080 + 401 报错分析(黑马外卖)
前端·javascript·vue.js
lichenyang4535 小时前
鸿蒙首页从等高商品 Grid 到双列瀑布流:同一张图也能做出小红书式浏览节奏
前端