Javascript实现页面内容下载
页面上有一段代码,要保存下来,怎么做?
选择复制?用按钮请求数据库?都很低效。
既然页面已经有了内容,为何不用JS获取这段代码,生成文件后直接下载?
下面我们用Blob
和URL.createObjectURL
来实现这一功能,兼容Chrome、Firefox和IE等主流浏览器。
1 演示
点击查看演示地址。
2 实现代码
JS代码如下,已经封装成一个函数,filename
是保存的文件名,content
是保存到这个文件中的内容:
function download(filename, content) { var blob = new Blob([content], {type: 'text/plain'}); var url = window.URL.createObjectURL(blob); var a = document.createElement('a'); a.style = "display: none"; a.href = url; a.download = filename; document.body.appendChild(a); a.click(); setTimeout(function () { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 5); }
这部分点实现步骤是:
- 先创建一个
blob
类文本对象(Binary large object),用它来虚拟表示一个文件。 - 再用
window.URL.createObjectURL
来生成blob
对象URL。这个对象URL是一个DOMString
,可以用在href
和src
之类的属性上。 - 创建一个隐藏的
<a>
标签。 - 设置
<a>
标签的href
和download
属性。 - 触发这个
<a>
标签的click
事件,实现下载。 - 用
setTimeout()
延时一小段时间,让click()
事件充分响应。 - 延时过后,
revokeObjectURL
释放由createObjectURL
创建的 object URL。当该 object URL 不需要的时候,我们要主动调用这个方法,获取最佳性能和内存使用。
3 点击下载
然后,我们可以添加一个按钮,点击事件下载文件:
按钮:
<button type="button" id="down">Download</button>
点击事件:
document.getElementById('down').onclick = function () { var filename = "justdown.txt"; var content = "Hello, you download a text file by Javasctipt."; download(filename, content); };
相关文章;Javascript读取文件内容到文本框。
参考资料:
- 如何用 JavaScript 下载文件
- Blob createObjectURL download not working in Firefox (but works when debugging)
- 在浏览器端用JS创建和下载文件
下一篇: Linux检测远程端口是否打开