別のトランザクションでオブジェクトストアを作成する必要があります。開いているデータベースとオブジェクトストアトランザクションの作成の両方を同じイベントにまとめます。
また、オブジェクトストアのオプションとしてautoincrement
との両方を使用することはできません。path
どちらかを選択する必要があります。
例を実行するコードは次のとおりです。
function initDB() {
if (window.indexedDB) {
var request = window.indexedDB.open('demo', 1);
request.onsuccess = function(event) {
db = event.target.result;
createObjectStore();
};
request.onupgradeneeded = function(event) {
db = event.target.result;
$('#messages').prepend('blah blah<br/>');
};
request.onerror = function(event) {
$('#messages').prepend('Chyba databáze #' + event.target.errorCode + '<br/>');
};
}
}
function createObjectStore() {
db.close();
var request = window.indexedDB.open('demo', 2);
request.onsuccess = function(event) {
db = event.target.result;
showDB();
};
request.onupgradeneeded = function(event) {
db = event.target.result;
$('#messages').prepend('yeah yeah yeah<br/>');
var store = db.createObjectStore('StoreName', { keyPath: 'id' });
store.createIndex('IndexName', 'id', { unique: true });
};
request.onerror = function(event) {
$('#messages').prepend('Chyba databáze #' + event.target.errorCode + '<br/>');
};
}
行き詰まり始めたら、Firefoxアドオン用に書いたindexeddbコードを見てください-sdk。コードは必要なものよりも複雑ですが、発生する必要のあるすべてのイベント、エラー、およびトランザクションの順序を確認できます。https://github.com/clarkbw/indexed-db-storage
幸運を!