可以将JavaScript变量保存为文件吗?

时间:2014-07-22 21:19:32

标签: javascript

有没有办法将JavaScript变量存储到文件中(例如TXT,XML ...),可以从浏览器下载到PC?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:53)

是的,您可以使用download属性

在HTML5中执行类似的操作
var textToSave = 'this is a test';

var hiddenElement = document.createElement('a');

hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.target = '_blank';
hiddenElement.download = 'myFile.txt';
hiddenElement.click();

FIDDLE

答案 1 :(得分:2)

您可以使用数据:URI,例如在adeneo的答案中,但另一种方法是使用HTML5 Blob and createObjectURL(类似地使用下载属性创建下载链接)。

使用createObjectURL的好处是大多数浏览器中的数据URI存在严重的大小限制。

取自链接文章的示例代码:

var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], {type: 'application/octet-binary'});
    // pass a useful mime type here
var url = URL.createObjectURL(blob);
// url will be something like: blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
// now you can use the url in any context that regular URLs can be used
// in, for example img.src, etc.

答案 2 :(得分:1)

要存储javascript变量,建议您使用libraries of data storage just like this one。您可以在哪里设置变量,获取它,删除它......

$.setData("key","value");
$.getData("key");
$.removeData("key");

但要将其存储在一个文件上并且可以下载,你必须通过服务器,除非你使用javascript技巧下载一个不存在的文件,你只需要声明这些函数

 var Download = 
    {
        click : function(node) {
            var ev = document.createEvent("MouseEvents");
            ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            return node.dispatchEvent(ev);
        },
        encode : function(data) {
                return 'data:application/octet-stream;base64,' + btoa( data );
        },
        link : function(data, name){
            var a = document.createElement('a');
            a.download = name || self.location.pathname.slice(self.location.pathname.lastIndexOf('/')+1);
            a.href = data || self.location.href;
            return a;
        }
    };
    Download.save = function(data, name)
    {
        this.click(
            this.link(
                this.encode( data ),
                name
            )
        );
    };

当您要下载文件时,请执行此操作

Download.save("data to be on a file","FileName.txt");

最后,您需要结合使用datastorage和filedownload解决方案来获得您要求的结果