Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Подгрузка и чтение локального XML при помощи JS

#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.

Комментариев нет:

Отправить комментарий