Открыть/сохранить локальный (JSON) файл из JavaScript >> IE/Firefox

Я очень новичок в JS, и я делаю небольшую html-страницу, которая для этого теперь будет выполняться локально. У меня есть строка в формате JSON, которую я должен иметь возможность хранить/загружать как файл на жесткий диск.

Чтобы иметь возможность хранить строку, у меня есть это для работы с Firefox:

function saveJSON() {
    var obj = {name:'John', max:100};
    window.open( "data:text/json;charset=utf-8," + escape(JSON.stringify(obj)))
}

Однако он работает только с FF, и мне также нужно иметь возможность делать это с Internet Explorer. Я прочитал некоторые вещи об использовании ActiveX, но я не нашел никакого примера о том, как это сделать.

Должен ли я попытаться использовать ActiveX, или есть лучший способ HTML/JS для сохранения файла, который работает для обоих браузеров?


Вторая проблема заключается в загрузке файла JSON. Я обнаружил, что после загрузки, я могу превратить его в JSON var с JSON.parse. Но я не знаю, как загрузить выбранный файл JSON. У меня есть

<input type=file id="filePath"> 

чтобы получить путь к файлу (хотя он возвращает разные вещи в обоих браузерах), и я хотел бы сделать что-то вроде

var a = loadFile(filePath.value)

Любые предложения о том, как это сделать? Я действительно застрял здесь и буду очень признателен за любую помощь.

Спасибо.

Ответ 1

Хорошо, я нашел решение для чтения файла на стороне клиента, который работает очень хорошо. Он также не является полностью небезопасным, поскольку "прямое и преднамеренное вмешательство пользователя требуется для раскрытия отдельных файлов в script". В настоящее время он работает только для меня только в Firefox, поэтому, я думаю, мне придется решить эту проблему на данный момент.

Спасибо всем за ваши комментарии и ответы; они были очень полезны, и я многому научился.

Ответ 2

Чтобы загрузить файл, он должен уже существовать на сервере. Затем он может быть загружен как часть вашего script (либо ленивый, либо включен в голову), либо загружен методом .load() библиотеки jQuery AJAX. Если это не на сервере, вам сначала нужно выполнить загрузку [это для предотвращения XSS].

Вы можете использовать вызовы .load(),.get() или full.ajax() jQuery, чтобы вытащить данные из этой точки. Смотрите здесь: http://api.jquery.com/load/

Для сохранения данных - используйте файл cookie для хранения данных таким образом, разместите данные в новом окне (отправьте форму), или если вы все еще хотите, чтобы это было в querystring, ваш метод должен работать.

Примечание. Я использую другую библиотеку JSON, но ниже выполняется как в IE, так и в FF.


  $(document).ready(function() {
    var obj = { name: 'John', max: 100 };
    window.open("data:text/json;charset=utf-8," + escape($.toJSON(obj))) 
  })

Я бы рекомендовал, чтобы передать это, вы делаете что-то вроде:


  function saveJSON(){
    var obj = {};
    obj.name = 'John';
    obj.max = 100;

    $("#json").val($.toJSON(obj));
    $("#hiddenForm").submit();
  }

И простая форма для его содержания...

<form action="somepageToDisplayFormFields.php" target="_blank" id="hiddenForm">
  <input type="hidden" name="json" id="json" />
</form>

Это позволит вам передавать более (и более сложные) объекты без использования ограничений размера URI и перекрестных функциональных различий между браузерами. Плюс, пытаясь выработать escape(), escapeURIComponent() и т.д.... в конечном итоге приведет вас в орехи.

Ответ 3

Прямая манипуляция файловой системой - это то, что обычно не разрешено с javascript на стороне клиента (с полным основанием. вы хотите, чтобы в ваших файлах находились случайные сайты?))

тем не менее вы можете более или менее выполнить свою первую цель, просто сделав свой JSON ссылкой для загрузки. Поместите свой URL-адрес DATA в ссылку href ссылки, и это должно работать в IE, начиная с IE8. с более старым IE вы SOL.

Что касается получения JSON файла с пути, есть свойство PROPRIETARY, FIREFOX ONLY, которое позволяет вам это делать. задокументировано здесь: https://developer.mozilla.org/en/DOM/File