Javascript实现页面内容下载

页面上有一段代码,要保存下来,怎么做?

选择复制?用按钮请求数据库?都很低效。

既然页面已经有了内容,为何不用JS获取这段代码,生成文件后直接下载?

下面我们用BlobURL.createObjectURL来实现这一功能,兼容ChromeFirefoxIE等主流浏览器。

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,可以用在 hrefsrc 之类的属性上。
  • 创建一个隐藏的 <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读取文件内容到文本框

 

参考资料:

  1. 如何用 JavaScript 下载文件
  2. Blob createObjectURL download not working in Firefox (but works when debugging)
  3. 在浏览器端用JS创建和下载文件

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

昵称 *