更新对象存储在chrome扩展's本地存储

Update object stored in chrome extension's local storage

本文关键字:存储 扩展 对象 chrome 更新      更新时间:2023-09-26

我正在开发一个chrome扩展,我将存储服务器发送的对象。例如,我将收到:

命令= {id:"1",类型:"A",大小:"B",优先级:"C"}

如果我有一个数据库,我会把它作为一行插入到表commands中。使用chrome。存储,我在键commands中存储这些对象的数组。

但是,当我收到服务器的新命令时,我必须从本地存储获取,更新数组,然后再次设置。我担心在获取和设置或删除已存储的命令时收到另一个命令的情况。我在考虑信号量,但我不知道这是不是一个好主意。

谁能建议我做什么?

谢谢!

扩展可以使用数据库:IndexedDB(示例代码可能看起来很复杂,但在实际扩展中非常简单,例如这里的两个小函数,getStyles和saveStyle,或IDB-keyval包装器库)。

如果您想使用chrome.storage,只需维护一个由服务器侦听器填充的全局queue数组:

queue.push(newItem);
updateStorage();

并在chrome.storage.local.get回调中处理:

function updateStorage() {
    if (!queue.length || updateStorage.running) {
        return;
    }
    updateStorage.running = true;
    chrome.storage.local.get('commands', data => {
        data.commands = [].concat(data.commands || [], queue);
        queue = [];
        chrome.storage.local.set(data, () => {
          updateStorage.running = false;
          if (queue.length) updateStorage();
        });
    });
}