在網(wǎng)絡(luò)上我們?cè)趺赐ㄟ^(guò)在網(wǎng)頁(yè)中下載我們需要的文件呢?那么今天我們就來(lái)說(shuō)說(shuō)有關(guān)于“在html5中怎么實(shí)現(xiàn)文件下載?頁(yè)面文件下載詳解! ”這方面的相關(guān)內(nèi)容。
需求描述
接到的原始需求是這樣的,有一個(gè)H5頁(yè)面,頁(yè)面中有個(gè)“點(diǎn)擊下載”的按鈕,點(diǎn)擊之后,完成下載特定的apk。
大概是下面這樣的??:
需求分析
接到需求的時(shí)候我偷樂(lè)了一下,這個(gè)H5頁(yè)面最大的優(yōu)點(diǎn)是不在微信中使用(微信好坑,各種限制,基本上從微信瀏覽器里面實(shí)現(xiàn)直接下載apk是不太可能的),如果是在平常的瀏覽器的話,就簡(jiǎn)單多了。
功能實(shí)現(xiàn)
于是我想到了第一種,點(diǎn)擊下載按鈕的時(shí)候改變 location.href。
方法一:
// 我隨便找了個(gè)apk的下載鏈接舉個(gè)例子
window.location.href = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';
拿在瀏覽器里面試了下,多個(gè)安卓機(jī)型都可以走通,然后我美滋滋得交付了任務(wù),收拾收拾東西回家。
然后…………
截圖中所說(shuō)的空白頁(yè)是因?yàn)槲腋淖僪ref為apk的下載鏈接,網(wǎng)頁(yè)打開(kāi)的時(shí)候會(huì)停留在一個(gè)空白頁(yè),然后一般手機(jī)的狀態(tài)欄上會(huì)出現(xiàn)下載apk的進(jìn)度條。
既然不想出現(xiàn)空白頁(yè)面的話,那不直接打開(kāi)一個(gè)頁(yè)面而改成在當(dāng)前頁(yè)打開(kāi)就可以了。
這時(shí)候想到 iframe,借助 iframe可以在原頁(yè)面打開(kāi)一個(gè)頁(yè)面。
方法二:
關(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的話,既可以實(shí)現(xiàn)下載,又可以不重新打開(kāi)頁(yè)面,并且,對(duì)原頁(yè)面的布局不會(huì)產(chǎn)生任何影響,最后我也是采取這種方案的。
方法三
第三種方法是偶然學(xué)到的,既然使用iframe可以,那使用form一定也是可以的,form的action也可以發(fā)請(qǐng)求。
于是改寫(xiě)了下第二種方法:
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();
以上的代碼也可以實(shí)現(xiàn)下載apk的需求。
總結(jié)
其實(shí)第二和第三種方法是擴(kuò)展發(fā)揮了iframe和form的用法,單獨(dú)來(lái)看,我們知道iframe可以在父頁(yè)面里嵌套子頁(yè)面,知道form的action可以發(fā)請(qǐng)求或者跳轉(zhuǎn)頁(yè)面,這是很常見(jiàn)的功能,但是不知道它們會(huì)被用在下載文件這個(gè)需求上,且產(chǎn)生的效果非常好??梢?jiàn)知識(shí)還是要融會(huì)貫通,舉一反三的。
寫(xiě)這篇的時(shí)候我去查了下iframe,原來(lái)ajax等技術(shù)未出現(xiàn)的時(shí)候,有段時(shí)間業(yè)內(nèi)常用的長(zhǎng)輪詢的方法竟然就是借助的iframe,有興趣的也可以研究一下。
那么到這里我們就知道有關(guān)于:“在html5中怎么實(shí)現(xiàn)文件下載?頁(yè)面文件下載詳解! ”這個(gè)問(wèn)題的相關(guān)內(nèi)容解析,更多有關(guān)于html5這方面的相關(guān)內(nèi)容我們都可以在W3Cschool中進(jìn)行學(xué)習(xí)和了解。