我的Chrome扩展程序使用chrome.storage
存储一些数据,&根据需要从存储中获取结果。
但是,我现在意识到我需要定期刷新chrome.storage
中的数据 - 这意味着不时清除它。
是否可以:
让Chrome将chrome.storage
视为会话存储 - 也就是说 - 它会在浏览器关闭后清除数据?
如果无法满足以上条件,chrome.storage.remove
是清除存储空间的唯一方法吗?
当chrome.storage
空间达到极限时会发生什么?
答案 0 :(得分:8)
使用带有前缀/后缀键的每个对象存储Date.now()
值。
如果对象很大,单独的键可能会更好。
Date.now() - CACHE_DURATION_IN_MS
remove()
和clear()
是从chrome.storage中删除的唯一方法
5,242,880字节:可以存储在本地存储中的最大数据量(以字节为单位),通过每个值的JSON字符串加上每个键的长度来衡量。如果扩展名具有unlimitedStorage权限,则将忽略此值。将导致超出此限制的更新立即失败并设置runtime.lastError。
注意:未发生错误时,chrome.runtime.lastError
未定义。
如上所示,要使用"unlimitedStorage"权限忽略默认的5MB限制。
原始示例(更好的一个会使用Promise):
function save(data, callback, retrying) {
Object.keys(data).forEach(k => data[k].savedOn = Date.now());
chrome.storage.local.set(data, () => {
if (!chrome.runtime.lastError)
return callback();
if (retrying)
throw chrome.runtime.lastError.message;
cleanup(() => save(data, callback, true));
});
}
const CACHE_DURATION = 7 * 24 * 3600 * 1000; // 7 days
function cleanup(callback) {
var cutoff = Date.now() - CACHE_DURATION;
chrome.storage.local.get(null, all => {
var expiredKeys = Object.keys(all).filter(k => all[k].savedOn < cutoff);
chrome.storage.local.remove(expiredKeys, callback);
});
}