1

Google Chrome 中的这段代码有什么问题

r = webkitIndexedDB.open(db_name,1);
r.onsuccess = success_callback;
r.onerror = error_callback;
r.onupgradeneeded = function(e){
   var db = e.currentTarget.result;
   db.createObjectStore('os_name',{keyPath:id,autoIncrement:true});
};

它适用于Firefox(mozIndexedDB),但不适用于chrome。即使 onerror 也不会被触发。无论如何我得到这个错误

Uncaught Error: NOT_FOUND_ERR: DOM IDBDatabase Exception 3
4

1 回答 1

4

onupgradeneeded谷歌浏览器不支持该功能,相反,您应该使用在数据库打开事件 setversion开始时启动数据库的方法,如下所述:http: //www.html5rocks.com/en/tutorials/indexeddb/todo/#toc -第2步onsuccess

您的代码应如下所示:

r.onsuccess = function(e) {
    var v = "1.0";
    var db = e.currentTarget.result;
    // We can only create Object stores in a setVersion transaction;
    if(v!= db.version) {
      var setVrequest = db.setVersion(v);

      setVrequest.onfailure = error_callback;
      setVrequest.onsuccess = function(e) {
        var store = db.createObjectStore('os_name',{keyPath:id,autoIncrement:true});
        ...
      };
    }
    ...
}

2013 年 11 月编辑:这是一个过时的答案,因为 Google Chrome 仅支持使用onupgradeneeded事件升级数据库。

于 2012-06-25T11:30:47.757 回答