我希望我的扩展能够存储" config"或者" meta / global"常量数据,并使扩展程序每天从我的Web服务器更新此配置数据。类名,匹配模式,标识符等等。
我可以将这些数据存储在prefs中,但它们是异步的,并且在扩展程序启动时无法使用。我需要它们立即可用,以便扩展可以对它们起作用。
现在我将此数据存储在我的扩展源本身中,因此无法更新。但它立即可用,而不是异步。
是否有更好的解决方案可以让我的扩展程序更新其内部数据?
答案 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);