无法在firefox中打开IndexedDB

时间:2014-04-09 08:07:40

标签: javascript firefox firefox-addon indexeddb

当我尝试从我的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部分。

提前致谢。

2 个答案:

答案 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);
}

enter image description here

尝试在FF控制台中运行代码,看看是否可以确认。与此同时,我很好奇,你在什么环境中看到这个错误?

答案 1 :(得分:0)

以下内容应该有效indexedDB

Components.utils.importGlobalProperties(["indexedDB"]);

我仅在open返回有效的IDBDatabase对象时进行了测试。请确认数据存储和检索。

(这只是一种解决方法,indexedDB存取方法是错误的)

修改:Chrome对话框有效indexedDB