如何自动清除chrome.storage

Blu*_*s23 4 javascript google-chrome google-chrome-extension

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

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

是否有可能:

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

  2. 如果无法满足要求,chrome.storage.remove那么清除存储的唯一方法是什么?

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

wOx*_*xOm 10

  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. 如您所见,要忽略默认的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);
    });
}
Run Code Online (Sandbox Code Playgroud)