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 给背景设置渐变色的方法
Sep 12 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
May 09 HTML / CSS
利用CSS3实现单选框动画特效示例代码
Sep 26 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
Jan 31 HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 HTML / CSS
HTML5实现预览本地图片
Feb 17 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
Jun 17 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
Jan 11 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
Mar 02 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
Nov 19 HTML / CSS
Canvas绘制像素风图片的示例代码
Sep 25 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
python使用分治法实现求解最大值的方法
2015/05/12 Python
python实现的简单抽奖系统实例
2015/05/22 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
python字典操作实例详解
2017/11/16 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python猴子补丁知识点总结
2020/01/05 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
刊首寄语大全
2014/04/11 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python