2017-04-25 7 views
0

エクステンションのクロムストレージに配列を格納しようとしていますが、何も格納されていないようです。 私は(私のcontent.jsに)このコードで何かを読み込むためにクロムストレージを取得できません

profil="myp"; 
domain="myd"; 

datas={}; 
datas[profil]={}; 
datas[profil]['orange']="mure"; 
datas[profil]['voiture']="rapide"; 

console.log("to save: "+domain+" "+JSON.stringify(datas)); 
chrome.storage.sync.set({domain: datas}, function() { console.log('Settings saved'); }); 

//I know I must does that later but the logs are in the right order 
datas={}; 

chrome.storage.sync.get(domain, function(items) 
{ 
    console.log("items: "+JSON.stringify(items)); 
} 

とログをテストしています:

to save: myd {"myp":{"orange":"mure","voiture":"rapide"}} 
content.js:147 Settings saved 
content.js:154 items: {} 

私は私のマニフェストファイルのパーミッション「ストレージ」を持っています。 私が忘れているものはありますか?

おかげ

答えて

2

chrome.storage.sync.setchrome.storage.sync.getオブジェクトを期待する、と彼らは店のためのキーとして、そのオブジェクトのプロパティを使用します。

chrome.storage.sync.getを呼び出すときは、domainというプロパティを持つオブジェクトが必要です。現在何も格納されていない場合は、その値がデフォルトになります。

てみてください:あなたは、パラメータとしてdomainを使用しているよう

chrome.storage.sync.get({ domain: [] }, function(items) 
{ 
    console.log("items: "+JSON.stringify(items)); 
} 

しかし、それはそう、になります。

ので

const domain = "myd"; 

// Store 
let store = {}; 
store[domain] = datas; 
chrome.storage.sync.set(store,() => console.log('Settings saved')); 

// Retrieve 
let key = {}; 
key[domain] = []; // Default 
chrome.storage.sync.get(key, items => 
    console.log(`items: ${JSON.stringify(items)}`)); 
+0

私は「CONSTで試してみました、あなたの提案を見てドメイン "が動作しませんでしたが、私はドメインを" myd "で直接置き換え、それは(自分のコードで)うまくいったのです。変数を "メインキー"として使用することは不可能であると思われるので、私の配列にドメインを含めるように変更します...とにかく助けてくれてありがとう。 – Entretoize

+0

私は最終的にいくつかのreflaxionの後にそれを得ました、多分あなたはgetとset内の関数宣言された方法を変更してはいけません、問題の原因ではなかったので、ありがとう。 – Entretoize

+0

@Entretoize例は、コピー・ペースト・ドロップイン・コードではなく、例示的なものです。あなたの変数をどのように宣言しているのか分かりませんが、厳密に ';'を使用するのがベストプラクティスです。 '' var''、 '' let''(ローカルスコープ)、 ' (再割り当てすることはできません)ので、私は私の例でそれを行います。私が怠けているのでコールバック関数は単純化されています;-)自分のコードでは、コールバックを完全に避けるために、 '' chrome-extension-async'(https://github.com/KeithHenry/chromeExtensionAsync)を 'await' 。 – Keith

関連する問題