使用 chrome.storage.local 存储数组
Posted
技术标签:
【中文标题】使用 chrome.storage.local 存储数组【英文标题】:Store an array with chrome.storage.local 【发布时间】:2013-05-12 10:11:48 【问题描述】:我正在编写 chrome 扩展程序,但无法存储数组。我读到我应该使用 JSON stringify/parse 来实现这一点,但是使用它时出错。
chrome.storage.local.get(null, function(userKeyIds)
if(userKeyIds===null)
userKeyIds = [];
var userKeyIdsArray = JSON.parse(userKeyIds);
// Here I have an Uncaught SyntaxError: Unexpected token o
userKeyIdsArray.push(keyPairId: keyPairId,HasBeenUploadedYet: false);
chrome.storage.local.set(JSON.stringify(userKeyIdsArray),function()
if(chrome.runtime.lastError)
console.log("An error occured : "+chrome.runtime.lastError);
else
chrome.storage.local.get(null, function(userKeyIds)
console.log(userKeyIds));
);
);
如何存储像 keyPairId: keyPairId,HasBeenUploadedYet: false 这样的对象数组?
【问题讨论】:
不需要对其进行字符串化/解析。可以直接存储数组。 @BeardFist I have Uncaught TypeError: Object # 你使用keys
获取和设置东西,当你得到它时,它是一个对象,例如chrome.storage.local.get('userKeyIds', function(stuff)console.log(stuff.userKeyIds););
【参考方案1】:
我认为您将 localStorage
误认为是新的 Chrome Storage API
。
- 如果是 localStorage
,您需要 JSON 字符串
- 您可以使用 new Storage API
// by passing an object you can define default values e.g.: []
chrome.storage.local.get(userKeyIds: [], function (result)
// the input argument is ALWAYS an object containing the queried keys
// so we select the key we need
var userKeyIds = result.userKeyIds;
userKeyIds.push(keyPairId: keyPairId, HasBeenUploadedYet: false);
// set the new array value to the same key
chrome.storage.local.set(userKeyIds: userKeyIds, function ()
// you can use strings instead of objects
// if you don't want to define default values
chrome.storage.local.get('userKeyIds', function (result)
console.log(result.userKeyIds)
);
);
);
【讨论】:
效果很好,非常感谢!以及默认值的好提示:) 没问题,很高兴我能帮上忙。 当我们将键设置为 userKeyIds 对象时,为什么最后会使用字符串的 'userKeyIds' 检索数据?代码似乎运行良好。 如果你想指定 默认值,getter 也接受一个对象:chrome.storage.local.get('userKeyIds': [1,2,3], fn)
在这种情况下,fn
将被调用userKeyIds
或 [1,2,3]
的值(如果尚不存在)。
但是,如果您不需要默认值,您可以简单地将要获取的键作为字符串或字符串数组传递(请参阅答案的代码)。 chrome.storage.local.get('userKeyIds', fn)
或 chrome.storage.local.get(['userKeyIds', 'otherKey', 'yetAnotherKey'], fn)
以上是关于使用 chrome.storage.local 存储数组的主要内容,如果未能解决你的问题,请参考以下文章
window.localStorage 与 chrome.storage.local