存储在 background.js 中的数组不会为某些用户保留 Chrome 会话

Array stored in background.js does not persist Chrome sessions for some users

我遇到了一个非常奇怪的问题,即 Chrome 扩展 background.js 页面中的状态信息没有为特定用户持续 Chrome 会话。 Chrome 会话我的意思是关闭和重新打开 Chrome。

我在 background.js 中存储的是一个键值对数组,我正在更新和阅读如下。

//background.js

var settings = [];
function (request, sender, sendResponse) {
    //SAVE
    if (request.cmd == "save") {
        settings[request.data.key] = request.data.value;
    }
    //RETRIEVE
    if (request.cmd == "load") {
        var myVal = settings[request.data.key];
        sendResponse(myVal);
    }
}

我确实注意到 Chrome 中的一个设置(高级设置),我可以确认是为这个特定用户调用的。

Continue running background apps when Google Chrome has closed.

还有什么可能导致 background.js 在 Chrome 个会话之间丢失状态信息?

只要加载 background.js,您的 settings 对象就只存在于内存中。

如果 Chrome 完全关闭,数据将丢失,因为它没有写入任何永久存储。

"Continue running background apps when Google Chrome has closed" 如果所有 Chrome 可见的 windows 都已关闭,则 Chrome 运行 将保留在后台;但你不应该依赖它来坚持。例如,如果用户注销或重启机器,数据将会丢失。

您有许多选项可以以持久的方式保存数据。推荐的是 chrome.storage API,部分原因是您的内容脚本(可能调用这些命令)可以直接访问它。

但如果您的目标是进行最小的更改,则可以使用 good old localStorage。它仅适用于您的后台脚本,因为它取决于页面来源。

这里是a comparison between the two