Не удается открыть IndexedDB в firefox
Я получаю следующую ошибку, когда пытаюсь открыть indexeddb из моего расширения firefox
[исключение... "Недопустимое значение" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" расположение: "Яш каркас :: хром://расширения/Азбука.html:: openDb:: строка 213 " data: no]
const DB_NAME = 'dbName';
const DB_VERSION = 1;
const DB_STORE_NAME = 'dbStore';
var db;
function openDb() {
try{
var req = indexedDB.open(DB_NAME, DB_VERSION);
req.onsuccess = function (evt) {
db = this.result;
};
req.onerror = function (evt) {
console.error("openDb:", evt.target.errorCode);
};
req.onblocked = function(evt) {
// If some other tab is loaded with the database, then it needs to be closed
// before we can proceed.
console.log("Please close all other tabs with this site open!");
alert("Please close all other tabs with this site open!");
};
}
catch(err){
alert(err);
}
}
Он переходит к части catch с приведенной выше ошибкой.
Заранее благодарю.
2 ответа:
Следующее должно дать Рабочий
indexedDB
Components.utils.importGlobalProperties(["indexedDB"]);
Я проверял только в том случае, если
open
возвращает допустимый объектIDBDatabase
. Пожалуйста, подтвердите хранение и извлечение данных.(это просто обходной путь,
indexedDB
Метод доступа глючит)Edit: диалоги Chrome имеют Рабочий
indexedDB
Обновление на основе групповой отладки вполне вероятно, что вы тестируете свой IDB-код в среде Firefox без окон. Поскольку IDB зависит от окна для создания его изолированной среды безопасности, вы не можете запустить IDB в такой среде.
Интересно, что я могу воспроизвести Firefox "TypeError: indexedDB is null" @ Christoph упоминает при использовании JSFiddle как для префиксных, так и для нефиксных
indexedDB
интерфейсов.Тот же код, воспроизведенный ниже, прекрасно работает в Хром. И, как ни странно, прекрасно работает в FF при выполнении непосредственно с консоли
var DB_NAME = 'dbName'; var DB_VERSION = 1; var DB_STORE_NAME = 'dbStore'; var db; try { var req = self.indexedDB.open(DB_NAME, DB_VERSION); req.onsuccess = function (evt) { db = this.result; console.log('success', evt.target.result); }; req.onerror = function (evt) { console.error("error", evt); }; req.onblocked = function (evt) { console.log('blocked', evt); }; } catch (err) { console.error(err.name, err.message); }
Попробуйте запустить код в консоли FF и посмотрите, сможете ли вы подтвердить. А пока мне любопытно, в какой среде вы видите эту ошибку?