动态更新存储的chrome扩展配置/全局数据,而不是在prefs中?

时间:2014-05-22 15:52:07

标签: google-chrome-extension

我希望我的扩展能够存储" config"或者" meta / global"常量数据,并使扩展程序每天从我的Web服务器更新此配置数据。类名,匹配模式,标识符等等。

我可以将这些数据存储在prefs中,但它们是异步的,并且在扩展程序启动时无法使用。我需要它们立即可用,以便扩展可以对它们起作用。

现在我将此数据存储在我的扩展源本身中,因此无法更新。但它立即可用,而不是异步。

是否有更好的解决方案可以让我的扩展程序更新其内部数据?

1 个答案:

答案 0 :(得分:0)

在扩展程序中,您仍然可以在非内容脚本中进行localStorage访问,这是同步的。

然而,异步chrome.storage出了什么问题?这不需要花费很长时间才能阅读,您只需要重新构建程序以等待这种非常快速的初始化。

如果您不想进行大规模重组,可以在脚本中为其创建一个同步“缓存”。

// Old:
var settings = { /* hard-coded values*/ }
doSomething(settings[key]);
settings[key] = value;

// New:
function updateCache(changes, area){
  if(area != "local") return;
  for(key in changes){
    settings[key] = changes[key].newValue;
  }
}

function setOption(key, value){
  settings[key] = value; // Synchronous cache update
  var update = {};
  update[key] = value;
  chrome.storage.local.set(update);
}

var settings = { /* set defaults here */ };
chrome.storage.local.get(settings, function(data){
  for(key in data) settings[key] = data[key];
  chrome.storage.onChanged(updateCache);
  /* Old top level code here */
});

doSomething(settings[key]); // Still synchronous
setOption(key, value);