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 优势以及网页设计师如何使用CSS3技术
Jul 29 HTML / CSS
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
Aug 25 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
Jun 17 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
Apr 22 HTML / CSS
HTML5 Canvas的常用线条属性值总结
Mar 17 HTML / CSS
配置H5的滚动条样式的示例代码
Mar 09 HTML / CSS
移动端Html5页面生成图片解决方案
Aug 07 HTML / CSS
html5 制作地图当前定位箭头的方法示例
Jan 10 HTML / CSS
css3带你实现3D转换效果
Feb 24 HTML / CSS
纯CSS实现一个简单步骤条的示例代码
Jul 15 HTML / CSS
浅谈为什么我的 z-index 又不生效了
Jul 15 HTML / CSS
详解CSS中postion和opacity及cursor的特性
Aug 14 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使用Imagick生成图片的方法
2015/07/31 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python如何实现反向迭代
2018/03/20 Python
Python selenium的基本使用方法分析
2019/12/21 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
印度低票价航空公司:GoAir
2017/10/11 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
新闻报道策划方案
2014/06/11 职场文书
工作总结与自我评价
2014/09/18 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
利用Python实现模拟登录知乎
2022/05/25 Python
redis lua限流算法实现示例
2022/07/15 Redis