#javascript #ajax #json #xml #файловая_система
В настоящий момент, из-за политики безопасности хромиума, нельзя подгружать локальные файлы через ajax без аргумента «--allow-file-access-from-files». Но мне в текущий момент требуется создать веб-приложение, где базой данных является xml-файл (в крайнем случае json), находящийся рядом с index.html. Подразумевается, что пользователь может запустить это приложение локально. Есть ли обходные пути для кроссбраузерного (ie11+) чтения xml-(json-) файла, без оборачивания его в функцию и переименования в формат js? UPD Есть код для IE, но с ним, как оказалось, проблем никаких и не было function loadXMLFile(filename) { return new Promise(function(resolve, reject) { // Если мы имеем дело с IE, то работает с ActiveX-контентом if('ActiveXObject' in window) { // Получение xml-текста из файла для осла var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); xmlDoc.async = false; xmlDoc.load(filename); resolve(xmlDoc.xml); } else { // Если мы работаем с нормальными браузерами, // то здесь необходимо как-то получить xml-файл // ... // } } }
Ответы
Ответ 1
Возможны следующие варианты: Расширение браузера. Оно работает почти как локальные файлы (в том смысле, что файлы статические и лежат в файловой системе) - но для доступа к ресурсам используется не схема file:///path/to/file, а схема chrome-extension:///{guid}/path/to/file. В этой схеме нет никаких ограничений на доступ к ресурсам вашего же приложения. Все, что вам нужно - составить правильный манифест и упаковать приложение в архив. Ну, и добавить его в браузер, конечно же. Вот тут есть полный формат файла манифеста: https://developer.chrome.com/extensions/manifest Минимальный манифест - вот такой: { "manifest_version": 2, "name": "Мое приложение", "version": "1.0", "default_locale": "ru", "description": "Описание приложения", "icons": { "16": "icon16.png", "48": "icon48.png", "128": "icon128.png" } } Если я ничего не напутал - такого минимального манифеста хватит для того чтобы просто отобразить статические файлы. Для того чтобы добавить приложение в хроме - надо опубликовать его в магазине приложений, но для хромиума это не обязательно. Локальный сервер. В сети имеется достаточно легковесных веб-серверов, которые не требуют установки и которые могут отдавать статические файлы по какому-нибудь URL вида http://127.0.0.1:8081/. Или же, наоборот, можно сделать приложение, которое требует установки и во время этой самой установки поднимает сайт на IIS. Статический сайт поднять не так и сложно, сложнее поставить сам IIS автоматически (это точно возможно, но не помню как). Встроенный браузер. Если встроить хромиум в ваше приложение - можно "подсунуть" ему любые файлы по нестандартной схеме. Или по стандартной - но выставив все нужные флаги. Из готовых решений на слуху Electron. Помимо прочих возможностей, Electron позволяет хранимому локально "клиентскому" коду использовать весь API Node.js.
Комментариев нет:
Отправить комментарий