<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 了解HTML/HTML5中的download屬性

          2016-9-1    藍(lán)藍(lán)設(shè)計(jì)的小編

          如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中,?請(qǐng)點(diǎn)這里 

          一、download屬性是個(gè)什么鬼?

          首先看下面這種截圖

          1.png

           

          如果我們想實(shí)現(xiàn)點(diǎn)擊上面的下載按鈕下載一張圖片,你會(huì)如何實(shí)現(xiàn)?

          我們可能會(huì)想到一個(gè)最簡單的方法,就是直接按鈕a標(biāo)簽鏈接一張圖片,類似下面這樣:

          <a href="large.jpg">下載</a>

          但是,想法雖好,實(shí)際效果卻不是我們想要的,因?yàn)闉g覽器可以直接瀏覽圖片,因此,我們點(diǎn)擊下面的“下載”鏈接,并是不下載圖片,而是在新窗口直接瀏覽圖片。

          下載

          看我的眼睛,

          2.gif

           

          于是,基本上,目前的實(shí)現(xiàn)都是放棄HTML策略,而是使用,例如php這樣的后端語言,通過告知瀏覽器header信息,來實(shí)

          header('Content-type: image/jpeg');
          header("Content-Disposition: attachment; filename='download.jpg'");
           

          然而,這種前后端都要操心的方式神煩,現(xiàn)在都流行前后端分離,還攪在一起太累了,感覺不會(huì)再愛了。

          那有沒有什么只需要前端動(dòng)動(dòng)指頭就能實(shí)現(xiàn)下載的方式呢?有,就是本文要介紹的download屬性。

          例如,我們希望點(diǎn)擊“下載”鏈接下載圖片而不是瀏覽,直接增加一個(gè)download屬性就可以:

          <a href="large.jpg" download>下載</a>
           

          沒錯(cuò),你沒有看錯(cuò),就這么結(jié)束了,不妨點(diǎn)擊后面的鏈接試試:下載

          結(jié)果在Chrome瀏覽器下(FireFox瀏覽器因?yàn)榭缬蛳拗茻o效):

          不僅如此,我們還可以指定下載圖片的文件名:

          <a href="index_logo.gif" download="_5332_.gif">下載</a>
           

          如果后綴名一樣,我們還可以缺省,直接文件名:

          <a href="index_logo.gif" download="_5332_">下載</a>
           

          截圖為虛,操作為實(shí):下載

          Chrome下的截圖效果示意:

          5.png


           

          一個(gè)大寫的酷里!

          二、瀏覽器兼容性和跨域策略

          然而,caniuse展示的兼容性只是個(gè)籠統(tǒng),根據(jù)鄙人的實(shí)地測(cè)試,事情要比看到的復(fù)雜。

          主要表現(xiàn)在跨域策略的處理上,由于我手上沒有IE13,所以,只能對(duì)比Chrome瀏覽器和FireFox瀏覽器:

          如果需要下載的資源是跨域的,包括跨子域,在Chrome瀏覽器下,使用download屬性是可以下載的,但是,并不能重置下載的文件的命名;而FireFox瀏覽器下,則download屬性是無效的,也就是FireFox瀏覽器無論如何都不支持跨域資源的download屬性下載。

          而,如果資源是同域名的,則兩個(gè)瀏覽器都是暢通無阻的下載,不會(huì)出現(xiàn)下載變?yōu)g覽的情況。

          7.png


           

          是否支持download屬性的監(jiān)測(cè)
          要監(jiān)測(cè)當(dāng)前瀏覽器是否支持download屬性,一行JS代碼就可以了,如下:

          var isSupportDownload = 'download' in document.createElement('a');
           

          三、結(jié)束語

          除了圖片資源,我們還可以是PDF資源,或者txt資源等等。尤其Chrome等瀏覽器可以直接打開PDF文件,使得此文件格式需要download處理的場景越來越普遍。

          此HTML屬性雖然非常實(shí)用和方便,但是兼容性制約了我們的大規(guī)模應(yīng)用。

          同時(shí)考慮到很多時(shí)候,需要進(jìn)行一些下載的統(tǒng)計(jì),純前端的方式想要保存下載量數(shù)據(jù),還是有些吃緊,需要跟開發(fā)的同學(xué)配合才行,還不如使用傳統(tǒng)方法。

          所以,download屬性的未來前景在哪里?當(dāng)下是否可以直接加入到實(shí)際項(xiàng)目?還需要我們一起好好想想。其實(shí)使用JS實(shí)現(xiàn)download屬性的polyfill并不難,但是,考慮到為何不所有瀏覽器都使用polyfill的方法,又覺得為了技術(shù)而技術(shù)是不太妥當(dāng)?shù)摹?

          總之,先放著心上,再觀察觀察。

           

          藍(lán)藍(lán)設(shè)計(jì)www.sdgs6788.com?)是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)BS界面設(shè)計(jì)? cs界面設(shè)計(jì)? ipad界面設(shè)計(jì)? 包裝設(shè)計(jì)? 圖標(biāo)定制? 用戶體驗(yàn) 、交互設(shè)計(jì)、?網(wǎng)站建設(shè)?平面設(shè)計(jì)服務(wù) 

           

          日歷

          鏈接

          個(gè)人資料

          存檔

          欧美久久亚洲精品| 久久99久久99精品免视看动漫| 久久受www免费人成_看片中文| 久久香蕉国产线看观看乱码| 久久综合给合久久国产免费| 午夜久久久久久禁播电影| 青青草原综合久久大伊人| 久久久无码精品亚洲日韩蜜臀浪潮 | 伊人久久五月天| 精品久久久久中文字幕一区| 国产99久久久国产精品~~牛| 精品少妇人妻av无码久久| 99久久久精品免费观看国产| 91精品国产91久久综合| 久久久91精品国产一区二区三区| 99久久这里只有精品| 久久噜噜电影你懂的| 国产精品久久久久久久久久免费| 国产三级精品久久| 久久无码AV中文出轨人妻| 亚洲欧美另类日本久久国产真实乱对白| 亚洲国产天堂久久综合网站| 亚洲国产精品久久久久婷婷软件| 99久久人人爽亚洲精品美女| 青青青青久久精品国产h| 久久国产乱子伦精品免费强| 久久国产高清一区二区三区| 无码任你躁久久久久久久| 久久精品日日躁夜夜躁欧美| 亚洲精品无码久久久久sm| 亚洲中文精品久久久久久不卡| 亚洲人成网亚洲欧洲无码久久| 久久久无码精品亚洲日韩按摩| 国内精品久久九九国产精品| 久久久艹| 久久夜色精品国产噜噜亚洲AV | 亚洲欧洲精品成人久久奇米网| 久久久久久免费视频| 久久99国产综合精品女同| 色综合色天天久久婷婷基地| 波多野结衣久久一区二区|