当我尝试从我的firefox扩展
打开indexeddb时出现以下错误[例外......“非法值”nsresult:“0x80070057(NS_ERROR_ILLEGAL_VALUE)”位置:“JS frame :: chrome://extension/abc.html :: openDb :: line 213”数据:否]
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部分。
提前致谢。
答案 0 :(得分:0)
更新根据群组调试,您可能会在无窗口的Firefox环境中测试IDB代码。由于IDB依赖于窗口来创建它的沙盒安全环境,因此您无法在这样的环境中运行IDB。
有趣的是,我能够重现Firefox" TypeError:indexedDB为null" @Christoph在使用JSFiddle作为前缀和未加前缀indexedDB
接口时提及。
下面转载的相同代码在Chrome中运行良好。奇怪的是,直接从控制台执行时,在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控制台中运行代码,看看是否可以确认。与此同时,我很好奇,你在什么环境中看到这个错误?
答案 1 :(得分:0)
以下内容应该有效indexedDB
Components.utils.importGlobalProperties(["indexedDB"]);
我仅在open
返回有效的IDBDatabase
对象时进行了测试。请确认数据存储和检索。
(这只是一种解决方法,indexedDB
存取方法是错误的)
修改:Chrome对话框有效indexedDB