HTML5中的強制下載屬性download使用例項解析

HTML5中的強制下載屬性download使用例項解析

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複製內容到剪貼簿

<a href="downloadpdf.php" download="download.pdf">點選直接下載並儲存成 download.pdf 檔案</a>  

https://codertw.com/wp-content/uploads/2018/07/20180709062344-5b42ff7099f08.jpg (600×151)

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

一些注意:
Firefox考慮到安全問題,該下載檔案必須是從自己的伺服器或域名中的,否則將在瀏覽器中開啟。
在Chrome和Opear中,如果說下載檔案不是在子集的伺服器或域名中,這些瀏覽器會忽視download屬性,換句話來說,檔名不變。

提供後備方案:
在寫本文的時候,download屬性並沒有在Safari和IE中實現,但是IE聲稱,download屬性的實現已經在開發日程頂部了。
https://codertw.com/wp-content/uploads/2018/07/20180709062344-5b42ff70b2a15.jpg (600×340)

在這期間,我們可以使用一個後備方案去相容那些瀏覽器。我們需要去下載Modernizr的download屬性特徵測試。
https://codertw.com/wp-content/uploads/2018/07/20180709062344-5b42ff70d222c.jpg (600×380)

然後新增以下指令碼:

JavaScript Code複製內容到剪貼簿

if ( ! Modernizr.adownload ) {   
    var $link = $(‘a’);   
    $link.each(function() {   
        var $download = $(this).attr(‘download’);   
        if (typeof $download !== typeof undefined && $download !== false) {   
      var $el = $(‘<div>’).addClass(‘download-instruction’).text(‘Right-click and select "Download Linked File"’);   
      $el.insertAfter($(this));   
        }   
    });   
}  

這個指令碼是去測試瀏覽器是否支援download屬性的,如果瀏覽器不支援的話,它就會想有download屬性的<a>標籤下面,插入一個有download-instruction類的<div>標籤,並給予文字指引使用右鍵下載。
https://codertw.com/wp-content/uploads/2018/07/20180709062345-5b42ff7104297.jpg (600×380)