存储在 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。
我遇到了一个非常奇怪的问题,即 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。