我多年来一直在维护Firefox扩展,并开始使用Chrome端口。
所以我看过存储apis(localStorage& chrome.storage)并且它们都可以工作,但我怎么想做默认偏好?
localStorage有点无用,因为每个网页都有一个单独的副本,我的扩展程序在网页内运行。
chrome.storage api存在,但除了由异步引起的头痛之外,没有简单的方法来设置默认值:(。
基本上我希望能够调用set并让它只设置值,如果它还不存在。
我想我可以为所有的值做一个get,然后为那些没有值的那些值做一个集合,但是它真的很快就会变得非常笨拙。
感觉就像是在努力做到这一点。有没有人对Chrome扩展程序中处理偏好设置有任何建议?
答案 0 :(得分:1)
您有~2个选项:
每次从存储中读取值时都会调用chrome.storage.get({'key1': 'default1', 'key2': 'default2'}, callback)
来提供默认值,如the documentation中所述,或者在扩展程序的onInstalled
事件中设置默认值:
chrome.runtime.onInstalled(function(details) {
chrome.storage.get({
'key1': 'default1',
'key2': 'default2'
}, function(options_with_defaults) {
chrome.storage.set(options_with_defaults);
});
});
您需要首先运行get
,因为onInstalled
除了初始安装之外还会在升级时运行,并且您不希望每次升级时都覆盖用户的设置。
第二个选项的竞争条件很短,因为它会覆盖用户在get()
和set()
调用之间更改的所有设置,但是防止这种情况的代码要复杂得多不值得。 : - /
(为了解决异步问题,我建议将chrome.storage
包装到基于Promise的API中。我们最终会在Chrome内部执行此操作,但这需要更长的时间。)< / p>