HTML5中的强制下载属性download使用实例解析


Posted in HTML / CSS onMay 12, 2016

HTML5 的 Download 属性用来强制浏览器下载对应文件,而不是打开。Chrome 和 Firefox 等浏览器太过于强大,也许是为了增强用户体验,当用户点击的资源文件可以被它们识别的时候(例如 pdf 会直接在浏览器打开,mp3、mp4 等媒体直接用浏览器内置播放器播放)。但有时候,用户其实是希望直接下载而不是在浏览器上看看,这时就可以加上这个属性,属性值会对下载的文件重命名:
<a href="downloadpdf.php" download="download.pdf">点击直接下载并保存成 download.pdf 文件</a>
如果你确定这个资源是用户肯定会下载的,就可以加上这个属性,还可以用 JS 或者手动改变想要保存的文件名。
在html里创建一个是下载链接是方便的,添加一个<a>标签和指向文件的href属性就行了。但是某些文件不会被下载(比如图像,pdf,txt,doc),相反,他们会在浏览器中被打开。
如果你的站点是有服务器端的,你可以通过配置.htaccess文件来使得那些文件可以被下载。如果你的站点是被WordPress.com或者github页面托管的(静态页面),那么轻考虑使用<a>标签的download属性

使用“Download”属性
download属性是html5规范的一部分,它表现为一个下载链接,而不是一个导航的链接。
download属性也允许你去重命名一个需要下载的文件。比如,一个文件存放在服务器上,如果这个文件是自动生成的,一般来说它被都命名为一个系统的数字和破折号的组合,例如acme-doc-2.0.1.txt,我们可以重命名这个下载文件的名字,用户下载后看到的文件名可以是一个比较好的名字,例如Acme Documentation (ver. 2.0.1).txt,像这样增加用户体验(不要忘记文件的拓展名)。

XML/HTML Code复制内容到剪贴板
  1. <a href="downloadpdf.php" download="download.pdf">点击直接下载并保存成 download.pdf 文件</a>  

HTML5中的强制下载属性download使用实例解析

可以看一下这个demo地址:http://tutsplus.github.io/download-attribute/index.html

一些注意:
Firefox考虑到安全问题,该下载文件必须是从自己的服务器或域名中的,否则将在浏览器中打开。
在Chrome和Opear中,如果说下载文件不是在子集的服务器或域名中,这些浏览器会忽视download属性,换句话来说,文件名不变。

提供后备方案:
在写本文的时候,download属性并没有在Safari和IE中实现,但是IE声称,download属性的实现已经在开发日程顶部了。
HTML5中的强制下载属性download使用实例解析

在这期间,我们可以使用一个后备方案去兼容那些浏览器。我们需要去下载Modernizr的download属性特征测试。
HTML5中的强制下载属性download使用实例解析

然后添加以下脚本:

JavaScript Code复制内容到剪贴板
  1. if ( ! Modernizr.adownload ) {   
  2.     var $link = $('a');   
  3.     $link.each(function() {   
  4.         var $download = $(this).attr('download');   
  5.         if (typeof $download !== typeof undefined && $download !== false) {   
  6.       var $el = $('<div>').addClass('download-instruction').text('Right-click and select "Download Linked File"');   
  7.       $el.insertAfter($(this));   
  8.         }   
  9.     });   
  10. }  

这个脚本是去测试浏览器是否支持download属性的,如果浏览器不支持的话,它就会想有download属性的<a>标签下面,插入一个有download-instruction类的<div>标签,并给予文字指引使用右键下载。
HTML5中的强制下载属性download使用实例解析

HTML / CSS 相关文章推荐
CSS3 translate导致字体模糊的实例代码
Aug 30 HTML / CSS
css3实现超立体3D图片侧翻倾斜效果
Apr 16 HTML / CSS
CSS3实现的文本3D效果附图
Sep 03 HTML / CSS
CSS3中的@keyframes关键帧动画的选择器绑定
Jun 13 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
Mar 25 HTML / CSS
canvas粒子动画背景的实现示例
Sep 03 HTML / CSS
HTML5本地存储之Web Storage应用介绍
Jan 06 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
Jan 31 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
Apr 15 HTML / CSS
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
Mar 31 HTML / CSS
分享CSS盒子模型隐藏的几种方式
Feb 28 HTML / CSS
css样式important规则的正确使用方式
Jun 10 HTML / CSS
HTML5事件方法全部汇总
May 12 #HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
May 06 #HTML / CSS
深入剖析HTML5 内联框架iFrame
May 04 #HTML / CSS
HTML5 Canvas绘制五星红旗
May 04 #HTML / CSS
字中字效果的实现【html5实例】
May 03 #HTML / CSS
html5需遵循的6个设计原则
Apr 27 #HTML / CSS
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
Apr 26 #HTML / CSS
You might like
php GeoIP的使用教程
2011/03/09 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
Python3读取zip文件信息的方法
2015/05/22 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
python面向对象 反射原理解析
2019/08/12 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
毕业生的自我评价分享
2013/12/18 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
试用期自我评价范文
2015/03/10 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
python实现简单的聊天小程序
2021/07/07 Python
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers