Blogger Information
Blog 1
fans 0
comment 0
visits 8204
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS前端创建标签文本或json文件保存到本地
离乄殇的博客
Original
8213 people have browsed it

这篇文章发布于 2017年07月5日,星期三,02:03,归类于 js实例。 阅读 3776 次, 今日 57 次

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=6252
本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意。

一、HTML与文件***

如果希望在前端侧直接触发某些资源的***,最方便快捷的方法就是使用HTML5原生的download属性,例如:

<a href="large.jpg" download>***</a>

具体介绍可参考我之前的文章:“了解HTML/HTML5中的download属性”。

但显然,如果纯粹利用HTML属性来实现文件的***(而不是浏览器打开或浏览),对于动态内容,就无能为力。

例如,我们对页面进行分享的时候,希望分享图***是页面内容的实时截图,此时,这个图***就是动态的,纯HTML显然是无法满足我们的需求的,借助JS和其它一些HTML5特性,例如,将页面元素转换到canvas上,然后再转成图***进行***。

但本文要介绍的***不是图***的***,而是文本信息的***,所需要使用的HTML特性不是canvas,而是其它。

二、借助HTML5 Blob实现文本信息文件***

如果对Blob不了解,可以先看看我好些年之前写的“理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型”一文。

原理其实很简单,我们可以将文本或者JS字符串信息借助Blob转换成二进制,然后,作为<a>元素的href属性,配合download属性,实现***。

代码也比较简单,如下示意(兼容Chrome和Firefox):

var funDownload = function (content, filename) {    // 创建隐藏的可***链接
   var eleLink = document.createElement('a');
   eleLink.download = filename;
   eleLink.style.display = 'none';    // 字符内容转变成blob地址
   var blob = new Blob([content]);
   eleLink.href = URL.createObjectURL(blob);    // 触发点击
   document.body.appendChild(eleLink);
   eleLink.click();    // 然后移除
   document.body.removeChild(eleLink);
};

其中,content指需要***的文本或字符串内容,filename指***到系统中的文件名称。

万般言语不达意,一枚实例来走心。

您可以狠狠地点击这里:基于funDownload实现的html格式文件***demo

点击“***”按钮,会把文本域中的内容全部作为一个.html后缀文件***下来,各流程效果如下面几张图:


出现***确认框(根据浏览器的设置不同也可能直接***),然后名称默认就是test.html。


然后对应保存目录就多了个类似下图的文件:


双击该test.html文件可以在浏览器中正常浏览,说明,保存信息无误。


触发***的JS代码就几行:

button.addEventListener('click', function () {
   funDownload(textarea.value, 'test.html');
});

以上~

三、结束语

不止是.html文件,.txt, .json等只要内容是文本的文件,都是可以利用这种小技巧实现***的。

在Chrome浏览器下,模拟点击创建的<a>元素即使不append到页面中,也是可以触发***的,但是在Firefox浏览器中却不行,因此,上面的funDownload()方法有一个appendChild和removeChild的处理,就是为了兼容Firefox浏览器。

download属性从Edge13开始支持,理论上,edge也应该支持直接JS触发的浏览器文件***,但我手头上并无相关浏览器,无法确定真实情况如何,欢迎有条件的小伙伴帮忙测下告知结果。

就这些吧,感谢阅读!



Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
氟西汀 2019-11-29 11:34:44
怎么不提示下载框,然后文件自动保存在当前的html同级目录下呢
1 floor
Author's latest blog post