Открыть/сохранить локальный (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