Chrome拡張機能で永続的または永続的なストレージを使用したいのですが、現在私がしようとしているのは、Indexeddbデータベースを作成し、それを別のページからクエリすることです。Chrome拡張機能の永続ストレージ
はここに私のコンテンツスクリプトのいずれかから何か:呼び出す
chrome.extension.sendRequest({
"type": "search",
"text": char
},
をこの:ここに
search: function(text) {
var entry = this.db_query(text);
if (entry != null) {
for (var i = 0; i < entry.data.length; i++) {
var word = entry.data[i][1];
}
}
return entry;
}
:しかし、空のIndexedDBを提供している
db_query: function(text) {
var background = chrome.extension.getBackgroundPage();
console.log(background);
var open = indexedDB.open("CEDICT", 1);
var db = open.result;
var tx = db.transaction("CEDICT", "readwrite");
var store = tx.objectStore("CEDICT");
var index2 = store.index("simplified");
var getData = index2.get(text);
getData.onsuccess = function() {
console.log(getData.result);
return getData.result;
};
tx.oncomplete = function() {
db.close();
};
},
を、これはバックグラウンドスクリプトにもかかわらず:
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
var open = indexedDB.open("CEDICT", 1);
open.onupgradeneeded = function() {
var db = open.result;
var store = db.createObjectStore("CEDICT", {autoIncrement:true});
var index1 = store.createIndex("traditional", 'traditional');
var index2 = store.createIndex("simplified", 'simplified');
};
open.onsuccess = function() {
var db = open.result;
var tx = db.transaction("CEDICT", "readwrite");
var store = tx.objectStore("CEDICT");
store.put({"traditional": "三體綜合症", "simplified": "三体综合症", "tones": ["1", "3", "1", "2", "4"]});
store.put({"traditional": "□", "simplified": "□", "tones": ["1"]});
store.put({"traditional": "○", "simplified": "○", "tones": ["2"]});
等...
tx.oncomplete = function() {
db.close();
};
なぜのIndexedDBは空ですか?私は何か間違っているのですか?私はこれを追加した後初めてプラグインをリロードしたとき、正しく動作し、私が望む値を与えましたが、それ以来、それは機能しておらず、空の値を返しました。ここで
は私が取得エラーです:
_generated_background_page.html:1 Error in event handler for extension.onRequest: InvalidStateError: Failed to read the 'result' property from 'IDBRequest': The request has not finished.
は、これはちょうど私が約束か何かを必要とするということですか?
あなたは 'chrome.storage' APIをチェックしましたか? https://developer.chrome.com/extensions/storage – Siggy
私のように巨大なデータベースでは動作しません –
'db_query'関数の' var db = open.result; '割り当てが問題であるようですが、データベースが開くまで待つ必要があります。別のもの...あなたの 'return getData.result'は' db_query'の呼び出し元に戻らず、イベントエミッターに戻ります。 – Siggy