JS實(shí)現(xiàn)html頁(yè)面點(diǎn)擊下載文件的兩種方式
JS實(shí)現(xiàn)html頁(yè)面點(diǎn)擊下載文件
1.使用<a>標(biāo)簽來(lái)完成
<a href="/user/test/xxxx.txt" rel="external nofollow" download="文件名.txt">點(diǎn)擊下載</a>
這樣當(dāng)用戶(hù)打開(kāi)瀏覽器點(diǎn)擊鏈接的時(shí)候就會(huì)直接下載文件。
但是有個(gè)情況,比如txt,png,jpg等這些瀏覽器支持直接打開(kāi)的文件是不會(huì)執(zhí)行下載任務(wù)的,而是會(huì)直接打開(kāi)文件,這個(gè)時(shí)候就需要給a標(biāo)簽添加一個(gè)屬性“download”;
以下為例子
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <a href="http://171.**.96.**:****/d/c833945c11/files/?p=/plugins.maintain.CheckLinePartTask/cebab687-6dc5-4128-b7d9-8bc2fe369598.png&raw=1" rel="external nofollow" download="test.png">點(diǎn)擊下載</a> </body> </html>
其中download后面的屬性是下載后文件的文件名字
如果url指向同源資源,是正常的。
如果url指向第三方資源,download會(huì)失效,表現(xiàn)和不使用download時(shí)一致——瀏覽器能打開(kāi)的文件,瀏覽器會(huì)直接打開(kāi),不能打開(kāi)的文件,會(huì)直接下載。瀏覽器打開(kāi)的文件,可以手動(dòng)下載。
解決方案一:將文件打包為.zip/.rar等瀏覽器不能打開(kāi)的文件下載。
解決方案二:通過(guò)后端轉(zhuǎn)發(fā),后端請(qǐng)求第三方資源,返回給前端,前端使用file-saver等工具保存文件。
2.使用按鈕進(jìn)行監(jiān)聽(tīng)
按鈕監(jiān)聽(tīng)又可以分為兩種方法,
一是window.open()
var $eleBtn1 = $("#btn1"); var $eleBtn2 = $("#btn2"); //已知一個(gè)下載文件的后端接口:https://codeload.github.com/douban/douban-client/legacy.zip/master //方法一:window.open() $eleBtn1.click(function(){ window.open("https://codeload.github.com/douban/douban-client/legacy.zip/master"); });
二是表單提交
//方法二:通過(guò)form $eleBtn2.click(function(){ var $eleForm = $("<form method='get'></form>"); $eleForm.attr("action","https://codeload.github.com/douban/douban-client/legacy.zip/master"); $(document.body).append($eleForm); //提交表單,實(shí)現(xiàn)下載 $eleForm.submit(); });
使用JS把文本內(nèi)容作為html文件下載
一個(gè)簡(jiǎn)單的下載Html頁(yè)面,我找了很多方法,但都不盡人意(有的需要后端協(xié)助,有的需要跨域)。
實(shí)現(xiàn)方法:
var eleTextarea = document.querySelector('textarea'); var eleButton = document.querySelector('input[type="button"]'); // 下載文件方法 var funDownload = function (content, filename) { //content是要下載頁(yè)面的html代碼,filename是下載后的文件名稱(chēng) var eleLink = document.createElement('a'); eleLink.download = filename; eleLink.style.display = 'none'; // 字符內(nèi)容轉(zhuǎn)變成blob地址 var blob = new Blob([content]); eleLink.href = URL.createObjectURL(blob); // 觸發(fā)點(diǎn)擊 document.body.appendChild(eleLink); eleLink.click(); // 然后移除 document.body.removeChild(eleLink); }; //判斷瀏覽器是否支持a標(biāo)簽的download屬性 if ('download' in document.createElement('a')) { // 作為test.html文件下載 eleButton.addEventListener('click', function () { funDownload(eleTextarea.value, 'test.html'); }); } else { eleButton.onclick = function () { alert('瀏覽器不支持'); }; }
到此這篇關(guān)于JS實(shí)現(xiàn)html頁(yè)面點(diǎn)擊下載文件(共兩種實(shí)現(xiàn)方法)的文章就介紹到這了,更多相關(guān)js點(diǎn)擊下載文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js中繼承的幾種用法總結(jié)(apply,call,prototype)
本篇文章主要介紹了js中繼承的幾種用法總結(jié)(apply,call,prototype) 需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12innerHTML屬性,outerHTML屬性,textContent屬性,innerText屬性區(qū)別詳解
這篇文章主要介紹了javascript中的innerHTML屬性,outerHTML屬性,textContent屬性,innerText屬性區(qū)別詳解,都是個(gè)人經(jīng)驗(yàn)的總結(jié),分享給大家,希望大家能夠喜歡。2015-03-03JS簡(jiǎn)單實(shí)現(xiàn)獲取元素的封裝操作示例
這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)獲取元素的封裝操作,結(jié)合實(shí)例形式分析了JS針對(duì)頁(yè)面ID、class、TAG元素獲取的函數(shù)與對(duì)象封裝操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-04-04uniapp獲取頁(yè)面高度與元素高度簡(jiǎn)單示例
在實(shí)際開(kāi)發(fā)中我們會(huì)遇到不確定高度的情況,那么在uniapp中我們?nèi)绾潍@取區(qū)域的高度吶?這篇文章主要給大家介紹了關(guān)于uniapp獲取頁(yè)面高度與元素高度的相關(guān)資料,需要的朋友可以參考下2023-09-09"好玩的放大鏡效果" 的另一種實(shí)現(xiàn)方法
"好玩的放大鏡效果" 的另一種實(shí)現(xiàn)方法...2006-11-11小程序webview內(nèi)網(wǎng)頁(yè)實(shí)現(xiàn)微信支付的代碼示例
這篇文章主要介紹了在小程序中使用webview實(shí)現(xiàn)微信支付功能,需要在小程序和webview之間進(jìn)行交互,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02