如何自动清除Chrome存储空间

5
我的Chrome扩展程序使用chrome.storage存储一些数据,并根据需要从存储中获取结果。
然而,我现在意识到我需要定期刷新chrome.storage中的数据,这意味着需要不时地清除它。
有没有可能:
1. 让Chrome将chrome.storage视为会话存储 - 也就是说 - 浏览器关闭后清除数据?
2. 如果以上不可行,是chrome.storage.remove清除存储的唯一方法吗?
3. 当chrome.storage空间达到其限制时会发生什么?
1个回答

13
  1. 将每个对象与 Date.now() 的值存储在一起或使用带有前缀/后缀的键进行存储。
    如果对象很大,则使用单独的键可能更好。

    • 定期检查所有项,并删除过期项,即存储日期小于当前 Date.now() - CACHE_DURATION_IN_MS 的项
    • 在读取时检查到期日期,如果需要,重新从网络(或其他地方)获取
  2. remove()clear() 是从 Chrome 存储中删除数据的唯一方法。

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

    注意:chrome.runtime.lastError 在没有错误发生时为未定义。

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

基本示例(更好的示例将使用 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);
    });
}

我最近发布了一个500字节的模块,它可以让你存储临时数据。它基本上做的就是这个答案建议的,但它被包装在一个类似于Mapmemoized function接口的外壳中。 - fregante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接