Как сохранить JavaScript в локальном файле?

Там уже есть решение для записи файла JSON в сети, но я хочу сохранить json файл локально. Я попытался использовать этот пример http://jsfiddle.net/RZBbY/10/ Он создает ссылку для загрузки файла, используя этот вызов a.attr('href', 'data:application/x-json;base64,' + btoa(t.val())).show(); Есть ли способ сохранить файл локально вместо предоставления загружаемой ссылки? Существуют другие типы преобразований за пределами data:application/x-json;base64?

Здесь мой код:

<!DOCTYPE html>
<head> 
    <meta charset="utf-8">
    <title>jQuery UI Sortable - Default functionality</title>

    <link rel="stylesheet" href="#" onclick="location.href='http://jqueryui.com/themes/base/jquery.ui.all.css'; return false;">
    <script src="http://jqueryui.com//jquery-1.7.2.js"></script>
    <script src="http://jqueryui.com/ui/jquery.ui.core.js"></script>
    <script src="http://jqueryui.com/ui/jquery.ui.widget.js"></script>
    <script src="http://jqueryui.com/ui/jquery.ui.mouse.js"></script>
    <script src="http://jqueryui.com/ui/jquery.ui.sortable.js"></script>
        <script src="http://jqueryui.com/ui/jquery.ui.accordion.js"></script>
    <link rel="stylesheet" href="#" onclick="location.href='http://jqueryui.com/demos/demos.css'; return false;">        
    <meta charset="utf-8">
    <style>a { font: 12px Arial; color: #ac9095; }</style>
<script type='text/javascript'>
$(document).ready(function() {
var f = $('form'), a = $('a'),
    i = $('input'), t = $('textarea');

$('#salva').click(function() {
    var o = {}, v = t.val();

    a.hide();//nasconde il contenuto
    i.each(function() { 
    o[this.name] = $(this).val(); });
    if (v === '') {
        t.val("[\n " + JSON.stringify(o) + " \n]")         
    }
    else {
        t.val(v.substr(0, v.length - 3));
        t.val(t.val() + ",\n " + JSON.stringify(o) +  " \n]")  
    }
});
});

$('#esporta').bind('click', function() {
    a.attr('href', 'data:application/x-json;base64,' + btoa(t.val())).show();

});
</script>
</head>
<body>
    <form>
        <label>Nome</label> <input type="text" name="nome"><br />
        <label>Cognome</label> <input type="text" name="cognome">
        <button type="button" id="salva">Salva</button>
    </form>        

    <textarea rows="10" cols="60"></textarea><br />
    <button type="button" id="esporta">Esporta dati</button>
    <a href="" style="display: none">Scarica Dati</a>
</body>
</html>

Ответ 1

Вы должны проверить атрибут download и метод window.URL, потому что атрибут download не похож на URI данных. Этот пример Google - это в значительной степени то, что вы пытаетесь сделать.

Ответ 2

Невозможно сохранить файл локально без привлечения локального клиента (машины браузера), поскольку я могу быть большой угрозой для клиентской машины. Вы можете использовать ссылку для загрузки этого файла. Если вы хотите хранить что-то вроде данных Json на локальном компьютере , вы можете использовать LocalStorage, предоставляемый браузерами, Web Storage

Ответ 3

Все зависит от того, чего вы пытаетесь достичь, "экономя локально". Вы хотите разрешить пользователю загружать файл? то <a download> - это путь. Вы хотите сохранить его локально, чтобы восстановить состояние приложения? Затем вы можете посмотреть различные варианты WebStorage. В частности localStorage или IndexedDB. FilesystemAPI позволяет создавать локальные виртуальные файловые системы, в которые вы можете хранить произвольные данные.

Ответ 4

В то время как большинство презирающих Flash, это жизнеспособный вариант для обеспечения функциональности "сохранить" и "сохранить как" в среде html/javascript.

Я создал виджет под названием "OpenSave", который предоставляет эту функцию, доступную здесь:

http://www.gieson.com/Library/projects/utilities/opensave/

-Mike

Ответ 5

Итак, ваш реальный вопрос: "Как можно сохранить JavaScript в локальном файле?"

Взгляните на http://www.tiddlywiki.com/

Они сохраняют свою HTML-страницу локально после того, как вы "изменили" ее внутри.

[ОБНОВЛЕНИЕ 2016.01.31]

Оригинальная версия TiddlyWiki сохранена напрямую. Это было неплохо и сохранено в настраиваемом каталоге резервного копирования с меткой времени как часть имени файла резервной копии.

Текущая версия TiddlyWiki просто загружает ее как любую загрузку файла. Вам необходимо сделать свое собственное управление резервным копированием.: (

[КОНЕЦ ОБНОВЛЕНИЯ

Фокус в том, что вы должны открыть страницу как файл://не как http://, чтобы сохранять локально.

Безопасность в вашем браузере не позволит вам сохранить локальную систему _someone_else'а, только по своему усмотрению, и даже тогда это не тривиально.

-Jesse

Ответ 7

Основано на http://html5-demos.appspot.com/static/a.download.html:

var fileContent = "My epic novel that I don't want to lose.";
var bb = new Blob([fileContent ], { type: 'text/plain' });
var a = document.createElement('a');
a.download = 'download.txt';
a.href = window.URL.createObjectURL(bb);
a.click();

Изменена оригинальная скрипка: http://jsfiddle.net/9av2mfjx/