我正在尝试将数据对象保存在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);
});
}
有人可以告诉我这里我做错了吗?
答案 0 :(得分:60)
问题在于chrome.storage.sync.set({key: testPrefs}
您的数据存储为
{
key: "{"val":10}"
}
因此,您的代码chrome.storage.sync.get('myKey')
会返回 undefined \ empty object 。
使用字符串"key"
作为密钥
chrome.storage.sync.get("key", function (obj) {
console.log(obj);
});
或
通过"myKey"
密钥设置数据。
chrome.storage.sync.set({"myKey": testPrefs}
P.S :不要忘记chrome.storage.sync
是永久存储API,在进行任何进一步测试之前使用chrome.storage.sync.clear来查看更改
使用此代码在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}"
}
答案 1 :(得分:6)
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({[key]: testPrefs}, function() {
console.log('Saved', key, testPrefs);
});
}
保存时,您可以强制使用[键]来评估变量键。这种方式很容易动态设置您的密钥。 希望有所帮助。
答案 2 :(得分:3)
由于chrome.storage.sync可以存储JS对象,你可以这样做:
var save = {};
save["myKey"] = testPrefs;
chrome.storage.sync.set(save, function() {
console.log('Settings saved');
});
答案 3 :(得分:2)
一种更有趣的方法,它还可以处理错误:
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] })
答案 4 :(得分:-1)
testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs)