詳解Html5頁面實現下載文件(apk、txt等)的三種方式

這篇文章主要介紹了詳解Html5頁面實現下載文件(apk、txt等)的三種方式,小編以爲挺不錯的,如今分享給你們,也給你們作個參考。一塊兒跟隨小編過來看看吧
 
 
 

需求描述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 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 form = document.createElement( 'form' );
form.action = src;
document.getElementsByTagName( 'body' )[0].appendChild(form);
form.submit();

以上的代碼也能夠實現下載apk的需求。

總結

其實第二和第三種方法是擴展發揮了iframe和form的用法,單獨來看,咱們知道iframe能夠在父頁面裏嵌套子頁面,知道form的action能夠發請求或者跳轉頁面,這是很常見的功能,可是不知道它們會被用在下載文件這個需求上,且產生的效果很是好。可見知識仍是要融會貫通,觸類旁通的。

寫這篇的時候我去查了下iframe,原來ajax等技術未出現的時候,有段時間業內經常使用的長輪詢的方法居然就是藉助的iframe,有興趣的也能夠研究一下。

以上就是本文的所有內容,但願對你們的學習有所幫助,也但願你們多多支持腳本之家

相關文章
相關標籤/搜索