データオブジェクトをchrome同期ストレージに保存してから取得しようとしていますが、get()関数は常に空のオブジェクトを返します。使用しているコードは、
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({key: testPrefs}, function() {console.log('Saved', key, testPrefs);});
}
function getUserPrefs() {
chrome.storage.sync.get('myKey', function (obj) {
console.log('myKey', obj);
});
}
誰かが私がここで間違っていることを教えてもらえますか?
問題は_chrome.storage.sync.set({key: testPrefs}
_にあります
あなたのデータは
_{
key: "{"val":10}"
}
_
したがって、コードchrome.storage.sync.get('myKey')
returnundefined\empty object。
キーとして文字列_"key"
_を使用します
_chrome.storage.sync.get("key", function (obj) {
console.log(obj);
});
_
または
_"myKey"
_キーを使用してデータを設定します。
_chrome.storage.sync.set({"myKey": testPrefs}
_
PS:_chrome.storage.sync
_は永続的なストレージAPIであることを忘れないでください chrome.storage.sync.clear beforeを使用してください変更を確認するためのさらなるテスト
このコードを使用して、Chrome.storageの変数値を設定します
_function storeUserPrefs() {
var key = "myKey",
testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs);
});
}
_
次の出力を生成します
_Object{
myKey: "{"val":10}"
}
_
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({[key]: testPrefs}, function() {
console.log('Saved', key, testPrefs);
});
}
保存時に[key]を使用して変数キーを強制的に評価することができます。この方法では、キーを動的に簡単に設定できます。お役に立てば幸いです。
より洗練された方法で、エラーも処理します:
const getStorageData = key =>
new Promise((resolve, reject) =>
chrome.storage.sync.get(key, result =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve(result)
)
)
const { data } = await getStorageData('data')
const setStorageData = data =>
new Promise((resolve, reject) =>
chrome.storage.sync.set(data, () =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve()
)
)
await setStorageData({ data: [someData] })
Chrome.storage.syncはJSオブジェクトを保存できるため、これを行うことができます。
var save = {};
save["myKey"] = testPrefs;
chrome.storage.sync.set(save, function() {
console.log('Settings saved');
});