【问题标题】:Array stored in background.js does not persist Chrome sessions for some users存储在 background.js 中的数组不会为某些用户保留 Chrome 会话
【发布时间】:2015-01-20 14:54:53
【问题描述】:

我遇到了一个非常奇怪的问题,即 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 中的一个设置(高级设置),我可以确认它是为这个特定用户调用的。

在 Google Chrome 关闭后继续运行后台应用程序。

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

【问题讨论】:

    标签: google-chrome google-chrome-extension


    【解决方案1】:

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

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

    “当谷歌浏览器关闭时继续运行后台应用程序”如果所有 Chrome 可见窗口都关闭,则使 Chrome 在后台运行;但你不应该依赖它来持久化。例如,如果用户注销或重启机器,数据将会丢失。

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

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

    这里是a comparison between the two

    【讨论】:

    • 也许我需要重新考虑存储机制。虽然在我的机器上设置可以保留 Chrome 和操作系统重新启动,但对于大多数其他用户来说也是如此。我一直觉得 background.js 是持久的?
    • 这很令人费解,因为不,它不是。 Chrome 不会在重新启动之间“休眠”您的背景页面,它会将其视为任何其他选项卡 - 除了不可见。您需要依赖其中一种存储 API 来存储持久数据。
    • 谢谢,我会看看使用更可靠的替代方案。
    • 无论如何,如果我的猜测是正确的,并且您正在使用来自内容脚本/选项页面的消息从后台请求设置 - chrome.storage 可以做得更好。
    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多