js下载的本质其实无非是让浏览器接收一个流文件,而一般情况下前台下载功能实现直接即可以使用html里面有专门下载标签,各项属性配一下就好了,但是有时候需要基于反爬虫、安全方面的考虑或者者需求上的下载触发,是一个未知的结果等等,这个时候就需要js来解决了。最近也遇到了相似的问题,写个参考集合记录一下
var url = "https://xxxxx.txt" // 下载地址window.open(url);
window.location.href = "https://xxxxx.txt"
var url = "https://xxxxx.txt" // 下载地址var params = '123' // 参数 // 创立form表单var formHtml = "<form method='post' style='display:none' id='formDownId' action='"+ url +">" + "<input type='hidden' value='" + params + "'></form>"var initHtml = document.createElement("div")initHtml.innerHTML = formHtml// 将form表单放入指定位置document.body.appendChild(initHtml)//操作dom,下载文件document.getElementById("formDownId").submit()// 下载完成,删除该formdocument.body.removeChild(initHtml)
var url = "https://xxxxx.txt" 1、通过点击const a = document.createElement('a') // 创立a标签a.setAttribute('download', '')a.setAttribute('href', url)a.click() // 执行点击事件2、通过initMouseEvent属性const htmlA = document.createElement('a')htmlA.setAttribute("href", url)htmlA.setAttribute('download', '')const itsArr = document.createEvent('mouseEvents')itsArr.initMouseEvent( "click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, false, 0, null)const returnStatus = htmlA.dispatchEvent(itsArr) // 下载结果返回