前提・実現したいこと
現在、競技プログラミングのリンクを保存して、復習に利用するクローム拡張を作成しています。
競技プログラミングのリンクを保存するためには、chrome.storageを利用する必要があります。
storageには一つのオブジェクトしか保存できないため、競技プログラミングのサイトごとのリンクを保存するためには工夫をする必要があります。
発生している問題・エラーメッセージ
chrome.storageはキーを元に、データを保存するため
例えば
javascript
1 2 var a = { 3 atcoder: [], 4 codeforces:[] 5 }; 6 a['atcoder'].push({ 7 url: 'http', 8 title: 'great sum', 9 times: '100' 10 }); 11 a['codeforces'].push({ 12 url: 'http', 13 title: 'great sum', 14 times: '100' 15 }) 16
上記のようなデータをchrome.storage.localにsetするとatcoderがキーの配列とcodeforcesがキーの配列を格納する必要があります。
しかし、一度保存するだけならいいのですが、これまでsetされていたものに、新たに同じオブジェクトを生成して保存しようとすると、これまでの値が消えて、新しい値のみが残ってしまいます。
そこで、以下のように変更しました。
javascript
1 var a = { 2 atcoder: [], 3 codeforces:[] 4 }; 5 a['atcoder'].push({ 6 url: 'http', 7 title: 'great sum', 8 times: '100' 9 }); 10 a['codeforces'].push({ 11 url: 'http', 12 title: 'great sum', 13 times: '100' 14 }) 15 16 chrome.storage.local.set(a); 17 18 //新しく更新するときは、これまでの値に追加したい 19 chrome.storage.local.get(function(items){ 20 items['atcoder'].push({ 21 url: 'new data', 22 title: 'new title' 23 }) 24 chrome.storage.local.set(items); 25 }) 26 27 //ここのconsole.logで更新されていない 28 chrome.storage.local.get(function(items){ 29 console.log(items); 30 }) 31
上記のように、local.getで取得したitemsに新たにデータを追加してsetすることで、これまでの値を消さないまま更新できるのではと考えました。
しかし、console.logをしても、値が変わっておらず、get内でsetをしても結果が反映されておりませんでした。
質問
local.get内でsetをしても、値が変更されないようなchromeの実装がされているのでしょうか。
また、get関数で取得したデータをget関数の外側に持ち出すにはどうすればよろしいでしょうか。(外部に持ち出したら、外部で編集をして、外部でsetを行えるから)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。