如何自动清除chrome.storage

时间:2017-02-26 12:56:25

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

我的Chrome扩展程序使用chrome.storage存储一些数据,&根据需要从存储中获取结果。

但是,我现在意识到我需要定期刷新chrome.storage中的数据 - 这意味着不时清除它。

是否可以:

  1. 让Chrome将chrome.storage视为会话存储 - 也就是说 - 它会在浏览器关闭后清除数据?

  2. 如果无法满足以上条件,chrome.storage.remove是清除存储空间的唯一方法吗?

  3. chrome.storage空间达到极限时会发生什么?

1 个答案:

答案 0 :(得分:8)

  1. 使用带有前缀/后缀键的每个对象存储Date.now()值。
    如果对象很大,单独的键可能会更好。

    • 定期检查所有项目并删除过期项目,即存储日期小于当前Date.now() - CACHE_DURATION_IN_MS
    • 检查阅读时的失效日期,并在需要时从网上(或其他地方)重新获取
  2. remove()clear()是从chrome.storage中删除的唯一方法

  3.   

    5,242,880字节:可以存储在本地存储中的最大数据量(以字节为单位),通过每个值的JSON字符串加上每个键的长度来衡量。如果扩展名具有unlimitedStorage权限,则将忽略此值。将导致超出此限制的更新立即失败并设置runtime.lastError。

    注意:未发生错误时,chrome.runtime.lastError未定义。

  4. 如上所示,要使用"unlimitedStorage"权限忽略默认的5MB限制。

  5. 原始示例(更好的一个会使用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);
        });
    }