处理Chrome扩展程序中的选项?

时间:2014-03-24 01:00:02

标签: javascript google-chrome google-chrome-extension

我多年来一直在维护Firefox扩展,并开始使用Chrome端口。

所以我看过存储apis(localStorage& chrome.storage)并且它们都可以工作,但我怎么想做默认偏好?

localStorage有点无用,因为每个网页都有一个单独的副本,我的扩展程序在网页内运行。

chrome.storage api存在,但除了由异步引起的头痛之外,没有简单的方法来设置默认值:(。

基本上我希望能够调用set并让它只设置值,如果它还不存在。

我想我可以为所有的值做一个get,然后为那些没有值的那些值做一个集合,但是它真的很快就会变得非常笨拙。

感觉就像是在努力做到这一点。有没有人对Chrome扩展程序中处理偏好设置有任何建议?

1 个答案:

答案 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>