【问题标题】:Can't Store and Retrieve From Chrome Storage无法从 Chrome 存储中存储和检索
【发布时间】:2016-06-11 20:50:20
【问题描述】:

首先,如果这个问题听起来与其他问题相似,我深表歉意。我做了很多研究,我想我无法将我的情况和其他人使用此 API 遇到的问题拼凑起来。

我正在创建一个 chrome 应用程序,它基本上展示了从 Chrome 存储 API 存储和检索数据的能力。一旦我习惯了这样做,我就可以在我正在制作的更大的应用程序中实现它。

但是,我似乎无法让基本应用程序正常工作。以下是相关代码:

“storage.js”

function Store(key,data) {

    console.log("Data: " + data);

    chrome.storage.local.set({ key: data }, function () {

        console.log("Secret Message Saved!");

    });

}

function Retrieve() {

    chrome.storage.local.get(function (data) {

        console.log("The data stored is:" + data);

    });

}

“master.js”(主脚本)

var myKey = "secretMessage";
var myData = "Pssst!";

Store(myKey, myData);

Retrieve(myKey);

console.log("Done!");

我很茫然。我得到的输出是:

Data: Pssst!
Done!
Secret Message Saved!
The data stored is:[object Object]

看来我存储错误或检索错误。

我查看了文档。也许我只是不了解 API 的概念以及它能够存储和检索的内容。我对使用 javascript 语言进行编码相当陌生。任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 有点好奇:为什么要使用 chrome 存储而不是通用 localStorage/indexdb,以便您的代码可以在所有支持现代 API 的 Web 平台上运行,而不是故意在其中烘焙平台不兼容性?
  • @Mike'Pomax'Kamermans 因为这是我第一次编写 chrome 应用程序,而且我对这个领域很陌生,所以我实际上并不熟悉这种存储方式。与 chrome storage api 相比,获取起来有多复杂?
  • 不太好,可以看这里的localstorage api文档:w3schools.com/html/html5_webstorage.asp
  • 它是一个您可以访问的全局对象,并且可以存储字符串:字符串对(因此,由于 JSON.stringify 和 JSON.parse,几乎可以存储任意数据)。我想我真正的问题是“为什么你需要一个 chrome 应用程序,而不是仅仅编写一个通用的网络应用程序”=)
  • @Mike'Pomax'Kamermans 我使用 chrome 应用程序的原因是因为我需要能够修改浏览器内容作为我正在编写的更大应用程序的一部分。

标签: javascript google-chrome google-chrome-app


【解决方案1】:

首先, chrome.storage.local.set & chrome.storage.local.get 是异步方法,要等chrome.storage.local.set把数据存入storage,再调用chrome.storage.local.get。

第二, chrome.storage.local.get 正在返回一个对象。您可以使用.toString()或JSON.stringify(data)查看对象

function Store(key,data, callback) {

    console.log("Data: " + data);

    chrome.storage.local.set({ key: data }, function () {

        console.log("Secret Message Saved!");
        callback(true);

    });

}

function Retrieve(success) {

    chrome.storage.local.get(function (data) {

        console.log("The data stored is:" + JSON.stringify(data));

    });
}

var myKey = "secretMessage";
var myData = "Pssst!";

Store(myKey, myData, Retrieve);

console.log("Done!");

【讨论】:

    【解决方案2】:

    我使用这个回调方法没有问题。

    function loadSelectedStyle(){
        chrome.storage.local.get('defaultColorSet', function (result) {
            console.log(result.defaultColorSet);
            defaultColors(result.defaultColorSet);
        });
    }
    

    如果您只是将“结果”写入控制台日志,则可以通过将键添加到结果中来查看整个对象,从而获得数据。

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多