使用chrome.storage.local.get获取值并将其分配给变量

时间:2015-08-06 02:14:40

标签: javascript google-chrome-extension

在我的Google Chrome扩展程序的background.js中,我有:

function getCurrentSurveyID() {
  chrome.storage.local.get(
    "currentSurveyID", function (value) {
      if (typeof value === "undefined") {var surveyID = 0;} else {var surveyID = value;}
      console.log("value of currentSurveyID read as " + surveyID);
      return {id: surveyID};
    }
  );
}

为什么我会:

value of currentSurveyID read as [object Object]
Uncaught ReferenceError: surveyID is not defined
    at <anonymous>:2:1
    at Object.InjectedScript._evaluateOn (<anonymous>:905:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

非常感谢。

====

更新

我刚刚发现了在chrome.storage.local.get中设置默认值的功能。该功能现在为:

function getCurrentSurveyID() {
  chrome.storage.local.get(
    {currentSurveyID: 0}, function (surveyID) {
      console.log("value of currentSurveyID read as " + surveyID);
      return {id: surveyID};
    }
  );
}

然而,行为没有改变。

更新II

我现在使用HTML5的本地存储而不是Chrome的工作:

function getCurrentSurveyID() {
  value = localStorage["currentSurveyID"] || 0;
  return {id: value};
}

但是,我仍然很想知道我在Chrome本地存储中犯了什么错误。

1 个答案:

答案 0 :(得分:0)

localStorage是一个非常不同的同步api,你使用的是不同的逻辑。从中可以看出,第一种情况下的错误是控制台中显示的错误:您的变量未定义,因为您从未为其分配任何内容。为其赋值的代码位于if不会执行的内部。你也正在错误地阅读返回值,请查看文档。它不返回单个值,而是返回一个对象。