需求描述javascript
接到的原始需求是這樣的,有一個H5頁面,頁面中有個「點擊下載」的按鈕,點擊以後,完成下載特定的apk。html
大概是下面這樣的👇:html5
需求分析java
接到需求的時候我偷樂了一下,這個H5頁面最大的優勢是不在微信中使用(微信好坑,各類限制,基本上從微信瀏覽器裏面實現直接下載apk是不太可能的),若是是在日常的瀏覽器的話,就簡單多了。面試
功能實現ajax
因而我想到了第一種,點擊下載按鈕的時候改變location.href。瀏覽器
方法一:微信
1
2
|
// 我隨便找了個apk的下載連接舉個例子
|
拿在瀏覽器裏面試了下,多個安卓機型均可以走通,而後我美滋滋得交付了任務,收拾收拾東西回家。app
而後…………佈局
截圖中所說的空白頁是由於我改變href爲apk的下載連接,網頁打開的時候會停留在一個空白頁,而後通常手機的狀態欄上會出現下載apk的進度條。
既然不想出現空白頁面的話,那不直接打開一個頁面而改爲在當前頁打開就能夠了。
這時候想到iframe,藉助iframe能夠在原頁面打開一個頁面。
方法二:
關鍵代碼:
1
2
3
4
5
|
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的話,既能夠實現下載,又能夠不從新打開頁面,而且,對原頁面的佈局不會產生任何影響,最後我也是採起這種方案的。
方法三
第三種方法是偶然學到的,既然使用iframe能夠,那使用form必定也是能夠的,form的action也能夠發請求。
因而改寫了下第二種方法:
1
2
3
4
5
|
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();
|
以上的代碼也能夠實現下載apk的需求。
總結
其實第二和第三種方法是擴展發揮了iframe和form的用法,單獨來看,咱們知道iframe能夠在父頁面裏嵌套子頁面,知道form的action能夠發請求或者跳轉頁面,這是很常見的功能,可是不知道它們會被用在下載文件這個需求上,且產生的效果很是好。可見知識仍是要融會貫通,觸類旁通的。
寫這篇的時候我去查了下iframe,原來ajax等技術未出現的時候,有段時間業內經常使用的長輪詢的方法居然就是藉助的iframe,有興趣的也能夠研究一下。
以上就是本文的所有內容,但願對你們的學習有所幫助,也但願你們多多支持腳本之家