IndexedDB поверх локального файла HTML

Я хотел бы разработать приложение, которое использует браузер для взаимодействия с пользователем. Приложение должно быть доступно в автономном режиме и распространяться через почтовый индекс.

Функции, которые я хотел бы выполнять, должны обрабатываться HTML, CSS, JS, и я хотел бы использовать функциональность IndexedDB.

У меня возникла проблема с IndexedDB (Chrome) в том, что один и тот же код работает в онлайн-пространстве, но не на локальном жестком диске (файл://).

См. пример: http://jsfiddle.net/FwuUD/

(function() {

    var db;
    var dbreq = indexedDB.open("TestApp", 2);

    dbreq.onsuccess = function(e) {
        alert("Database created");
        db = e.target.result;

        var employeeStore = db.createObjectStore (
            "employees",
            {keyPath: "id"}
        );

    };

    dbreq.onerror = function(e) {
        alert("Database Error: " + e.target.errorCode);
    };

    dbreq.onupgradeneeded = function(e) {
        alert("Database upgrade needed");
    };

})();

Какие-либо предложения?


person Adam Rybak    schedule 29.03.2013    source источник
comment
Это работает нормально для меня в обоих случаях, но мне пришлось переместить createObjectStore в onupgradeneeded   -  person Explosion Pills    schedule 29.03.2013
comment
Если у вас есть python: python -m http.server запускает веб-сервер на порту 8000 в локальном каталоге.   -  person 79E09796    schedule 08.08.2013


Ответы (3)


API indexedDB работает только внутри веб-сервера. Когда вы переходите к нему с помощью файловой системы, он не будет работать. Для работы API indexedDB требуется контекст домена, а файловая система его не предоставляет. Короче говоря, вам нужен URL-адрес, чтобы использовать API.

person Kristof Degrave    schedule 29.03.2013
comment
Большое спасибо за вашу помощь, есть ли у вас какие-либо предложения о том, как я могу использовать эту функцию только в приложении на стороне клиента? - person Adam Rybak; 29.03.2013
comment
Это должно означать, что на каждом устройстве, на которое вы хотите его скопировать, должен быть запущен веб-сервер. Также файлы должны быть скопированы в папку этого веб-сервера, чтобы они были доступны через URL-адрес обратной связи (127.0.0.1 ). - person Kristof Degrave; 29.03.2013

IndexedDB отключен при запуске из файла:/// в целях безопасности. Неясно, управляете ли вы параметрами браузера. Если вы это сделаете, вы можете передать --allow-file-access-from-files, что позволит IndexedDB работать из источника file:///.

person dgrogan    schedule 30.03.2013

Если кто-то ищет обновленный ответ на этот вопрос 6-летней давности, и Chrome, и Safari теперь позволяют локальным файлам HTML получать доступ к API IndexedDB без необходимости использования локального сервера. IE, похоже, продолжает сдерживаться в этом вопросе. Не уверен насчет Edge или Firefox.

person junjie    schedule 11.09.2019
comment
Пожалуйста, не могли бы вы расширить этот ответ и указать, как заставить Chrome разрешить доступ к API indexDB с локальными файлами HTML и JS? Я пытаюсь, но это не работает. Кажется, он заблокирован. заранее спасибо - person willy wonka; 25.03.2020