【问题标题】:clarification on chrome extension local storage关于 chrome 扩展本地存储的说明
【发布时间】:2016-04-29 03:07:23
【问题描述】:

我正在编写一个应用程序,该应用程序首先将图表的一些空白起始数据实例化到 chrome.storage 中,因为正在使用扩展程序,因此数据会更新。

我现在格式化代码的方式是在代码启动时实例化存储,这是一个问题,因为当您重新启动chrome时代码会重新开始,因此它会覆盖所有已写入的数据。

所以我认为我需要编写某种检查函数,我可以在其中编写类似

的内容
chrome.storage.sync.get("data", function (result){
    if ("data" !== null){
        initStorage();
    } else {
        //do stuff
    }
})

这是解决此问题的正确方法吗? 我想知道这是否适用于存储功能?每个扩展是否都有自己的存储区域,所以如果我还没有保存任何东西,那里就不会有任何东西?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension local-storage


    【解决方案1】:

    请注意,您可以在get: 中提供默认值:

    var default_data = { /* something */ };
    chrome.storage.sync.get({data: default_data}, function(result) {
        // If "data" wasn't present in storage, result.data is a copy of default_data
        // Otherwise, result.data is a copy of the actual stored value
        chrome.storage.sync.set(result); // To save the default, if not saved
    });
    

    【讨论】:

    • 所以这相当于检查数据是否存在,如果不存在则写入默认数据,如果存在则检索现有数据?
    • 是的。如果数据在这里并且您没有更改result,则set 不会更改任何内容;如果它不存在,您将获得默认值,set 会将其写入存储。我会把这段代码放在runtime.onStartup之类的地方。
    • 非常有用的提示
    【解决方案2】:

    因为您可以从存储中检索多个值,所以result 是一个带有您请求的键的对象。检查该对象中是否存在“数据”:

    chrome.storage.sync.get("data", function(result) {
        if (!("data" in result)) {
            initStorage();
        }
        // Do stuff
    });
    

    【讨论】:

    • 如果我只将一个名为 data 的密钥从我的扩展程序保存到存储中,是否意味着如果我没有保存任何内容,那里就什么也没有?我不完全确定存储是如何工作的,是只有一个大桶用于存储使用存储的所有东西,还是每个东西都有自己的单独区域来保存密钥?
    • @Jessie Storage 是您查询的一个大存储桶。如果您要求"data",它只会是result.data(如果存在,否则为空)。如果您要求["data", "somthing"],您将获得一个最多包含 2 个键的对象。如果你要求null,它会倾倒整个桶。
    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多