App下載

在html5中怎么實現(xiàn)文件下載?頁面文件下載詳解!

猿友 2021-07-26 10:45:30 瀏覽數(shù) (6754)
反饋

在網(wǎng)絡(luò)上我們怎么通過在網(wǎng)頁中下載我們需要的文件呢?那么今天我們就來說說有關(guān)于“在html5中怎么實現(xiàn)文件下載?頁面文件下載詳解! ”這方面的相關(guān)內(nèi)容。

需求描述

接到的原始需求是這樣的,有一個H5頁面,頁面中有個“點擊下載”的按鈕,點擊之后,完成下載特定的apk。

大概是下面這樣的??:

需求分析

接到需求的時候我偷樂了一下,這個H5頁面最大的優(yōu)點是不在微信中使用(微信好坑,各種限制,基本上從微信瀏覽器里面實現(xiàn)直接下載apk是不太可能的),如果是在平常的瀏覽器的話,就簡單多了。

功能實現(xiàn)

于是我想到了第一種,點擊下載按鈕的時候改變 location.href。

方法一:

// 我隨便找了個apk的下載鏈接舉個例子
window.location.href = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';

拿在瀏覽器里面試了下,多個安卓機型都可以走通,然后我美滋滋得交付了任務(wù),收拾收拾東西回家。

然后…………

截圖中所說的空白頁是因為我改變href為apk的下載鏈接,網(wǎng)頁打開的時候會停留在一個空白頁,然后一般手機的狀態(tài)欄上會出現(xiàn)下載apk的進度條。

既然不想出現(xiàn)空白頁面的話,那不直接打開一個頁面而改成在當(dāng)前頁打開就可以了。

這時候想到 iframe,借助 iframe可以在原頁面打開一個頁面。

方法二:

關(guān)鍵代碼:

var src = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = "javascript: '<script>location.href="" + src + ""</script>'";
document.getElementsByTagName('body')[0].appendChild(iframe);

使用iframe的話,既可以實現(xiàn)下載,又可以不重新打開頁面,并且,對原頁面的布局不會產(chǎn)生任何影響,最后我也是采取這種方案的。

方法三

第三種方法是偶然學(xué)到的,既然使用iframe可以,那使用form一定也是可以的,form的action也可以發(fā)請求。
于是改寫了下第二種方法:

var src = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';
var form = document.createElement('form');
form.action = src;
document.getElementsByTagName('body')[0].appendChild(form);
form.submit();

以上的代碼也可以實現(xiàn)下載apk的需求。

總結(jié)

其實第二和第三種方法是擴展發(fā)揮了iframe和form的用法,單獨來看,我們知道iframe可以在父頁面里嵌套子頁面,知道form的action可以發(fā)請求或者跳轉(zhuǎn)頁面,這是很常見的功能,但是不知道它們會被用在下載文件這個需求上,且產(chǎn)生的效果非常好。可見知識還是要融會貫通,舉一反三的。

寫這篇的時候我去查了下iframe,原來ajax等技術(shù)未出現(xiàn)的時候,有段時間業(yè)內(nèi)常用的長輪詢的方法竟然就是借助的iframe,有興趣的也可以研究一下。

那么到這里我們就知道有關(guān)于:“在html5中怎么實現(xiàn)文件下載?頁面文件下載詳解! ”這個問題的相關(guān)內(nèi)容解析,更多有關(guān)于html5這方面的相關(guān)內(nèi)容我們都可以在W3Cschool中進行學(xué)習(xí)和了解。 


0 人點贊