Можно ли сохранить переменную JavaScript как файл?
Есть ли способ сохранить переменную JavaScript в файл (например, TXT, XML...), которую можно загрузить из браузера на ПК?
Спасибо за любой совет.
Ответы
Ответ 1
Да, вы можете сделать что-то подобное в HTML5, используя атрибут download
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
Ответ 2
Вы можете использовать данные: URI, как в ответе adeneo, но другим способом является использование HTML5 Blob и 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.
Ответ 3
Чтобы сохранить переменную javascript, я предлагаю вам использовать библиотеки хранения данных, подобные этому. где вы можете установить переменную, получить ее, удалить ее...
$.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");
Наконец, вам нужно объединить хранилище данных и решение filedownload, чтобы получить результат, который вы запрашиваете