笔者在最近写chrome浏览器插件时,遇到了一个问题
这个插件是一个保存网页链接,类似于收藏夹的一个插件,其中有一个需求是要将保存好的收藏夹导出到本地文件系统
但是,浏览器对于本地文件系统的保护极其严格,插件很难访问到本地文件,所以笔者打算通过调用chrome.downloads.download
方法,通过下载的方式间接实现导出
那么问题就变成了,如何通过这个download方法来实现保存自定义内容的文本
通过查阅chrome插件的API文档,可以发现,download方法接受url作为参数,这个时候有一种方法,是通过http请求,把需要导出的数据上传到某个服务器,再通过download方法来导出到本地,有点类似于使用图床。但是这就有点小题大做了,如果有这个精力去实现一个服务器,不如直接搞云端备份。
还有一个思路,也是本文的解决方法,就是使用dataURL。关于dataURL,不熟悉的朋友可以看看参考https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Data_URLs,大概就是把数据本身弄到了URL里面,访问这个URL就相当于直接访问了数据本身
所以我们构造一个自定义的URL,例如上文中的data:,Hello%2C%20World!
具体实现代码如下
chrome.downloads.download({
url:"data:,"+str,
filename:"exported_watch_later_list.json",
conflictAction : "overwrite"
},function (id){
});
其中str为需要导出的文本,通过JSON.stringify(obj)
就可以把一个对象转换为字符串
至此,导出部分就完成了,目前笔者还在研究导入的方法,如果各位有想法欢迎在评论区讨论,如果本文有错误的地方也欢迎在评论区里指正。