浏览器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);
  }
相关推荐
栀秋6661 分钟前
从零开始调用大模型:使用 OpenAI SDK 实现歌词生成,手把手实战指南
前端·llm·openai
l1t1 分钟前
DeepSeek总结的算法 X 与舞蹈链文章
前端·javascript·算法
智航GIS22 分钟前
6.2 while循环
java·前端·python
2201_7578308723 分钟前
AOP核心概念
java·前端·数据库
雪人.26 分钟前
JavaWeb经典面试题
java·服务器·前端·java面试题
JIngJaneIL35 分钟前
基于java+ vue学生成绩管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
小恒恒37 分钟前
2025 Vibe Coding 有感
前端·uni-app·trae
用户214118326360237 分钟前
dify案例分享-免费体验Dify + Qwen-Image-2512 文生图图生图全流程
前端
千寻girling1 小时前
面试官 : “ 说一下 localhost 和127.0.0.1 的区别 ? ”
前端·javascript·面试
老华带你飞1 小时前
智能菜谱推荐|基于java + vue智能菜谱推荐系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot