浏览器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);
  }
相关推荐
小赵同学WoW几秒前
BroadCast Channel() 浏览器跨标签页通信的实现方式之一
前端·浏览器
\xin几秒前
pikachu自编exp,xss之盲打,过滤,htmlspecialchars,href,js
前端·xss
ZC跨境爬虫13 分钟前
前端实战复盘:从零完成Apple中国大陆官网UI第一阶段全量静态复刻
前端·css·ui·html
苏一恒21 分钟前
MP4 在 <video> 里,必须全量下载才能起播吗?—— moov、Range 与被误解的 FastStart
前端
Java小卷29 分钟前
低代码并没有过时!可拖拽表单设计器布局思路
前端·低代码
idcu31 分钟前
深入 Lyt.js 响应式系统:Proxy + Signal 双模式
前端
idcu32 分钟前
Vapor Mode 揭秘:无虚拟 DOM 的极致性能
前端
idcu34 分钟前
从 Vue 3 到 Lyt.js:无痛迁移指南
前端
尘世壹俗人35 分钟前
如何检查服务器上消耗资源的程序是那个
服务器·前端·chrome
LIO41 分钟前
Vue Router 进阶:深入用法与最佳实践
前端·vue-router