浅析HTML5中的download属性使用

2020-04-24 19:28:20易采站长站整理

随着前端技术的发展,越来越多的业务场景中需要前端来处理文件下载。在众多的方法中,通过

<a>
标签的 download 属性实现下载是其中常见也是比较简单的一种方法。

download 属性介绍

常规的

<a>
标签通过 href 实现链接跳转,如果只想下载文件而不是跳转预览,最好的方式是在
<a>
标签中添加
download
属性,就能很简单地实现下载操作。

download
是 HTML5 中
<a>
标签新增的一个属性,此属性会强制触发下载操作,指示浏览器下载 URL 而不是导航到它,并提示用户将其保存为本地文件,例如:


<a href="result.png" download>download</a>

如果缺少

download
属性,点击 "download" 会直接变成预览图片,当添加
download
属性后则会触发图片的下载。

目前

download
属性的兼容性如caniuse 中所展示的:

可以以看到,大部分主流的浏览器基本都已经支持

download
属性,而 IE 的表现一如既往的感人,目前许多 Window 系统仍然在使用 IE ,这也是许多业务需求需要考虑的。这种兼容性问题限制了
download
的更广泛应用。

动态资源下载

面对一些动态内容下载的业务场景,即图片等资源的地址并不是固定的(例如一些在线绘图工具所生成的图片),只使用 HTML 无法满足需求。为了能够满足不同的 URL 下载,可以通过JS 实现一个动态触发 URL 下载的方法。


function download(href, filename='') {
const a = document.createElement('a')
a.download = filename
a.href = href
document.body.appendChild(a)
a.click()
a.remove()
}

需要注意的是,代码中对创建的

<a>
进行的
appendChild
remove
操作主要是为了兼容 FireFox 浏览器,在 FireFox 浏览器下调用该方法如果不将创建的
<a>
标签添加到 body 里,点击链接不会有任何反应,无法触发下载,而在 Chrome 浏览器中则不受此影响。