chrome.storage.local.get 并设置 [重复]

Posted

技术标签:

【中文标题】chrome.storage.local.get 并设置 [重复]【英文标题】:chrome.storage.local.get and set [duplicate] 【发布时间】:2012-12-02 02:12:52 【问题描述】:

我正在尝试在我的扩展程序中使用chrome.storage.local,但它似乎不起作用。我使用了localStorage,但意识到我不能在多个页面的内容脚本中使用它。

所以,这就是我想出的:

function save()

    var channels = $("#channels").val();
    var keywords = $("#keywords").val();

    chrome.storage.local.set('channels': channels);
    chrome.storage.local.set('keywords': keywords);

我确实相信我在做save() 正确,但问题出现在load()

function load()

    var channels = "";
    chrome.storage.local.get('channels', function(result)
        channels = result;
        alert(result);
    );

    var keywords = "";
    chrome.storage.local.get('keywords', function(result)
        keywords = result;
        alert(result);
    );

    $("#channels").val(channels);
    $("#keywords").val(keywords);

当警报触发时,它会打印出[object Object]。这是为什么?我究竟做错了什么?我查看了文档/示例,但似乎无法确定问题所在。

【问题讨论】:

【参考方案1】:

此代码适用于我:

function load() 
    var channels = "";
    var keywords = "";
    chrome.storage.local.get('channels', function (result) 
        channels = result.channels;
        alert(result.channels);
        $("#channels").val(channels);
    );
 

Chrome.storage.local.get() 返回一个在其键值映射中包含项目的对象,因此您必须在搜索模式中使用键的索引。

小鬼:

感谢 Rob 识别:Chrome.storage.local.get() 是 asynchronous,您应该修改您的代码以确保它们在 callback() 成功后工作。

如果您需要更多信息,请告诉我。

【讨论】:

单个代码块能否用于返回所有键? 最好在回调函数中声明变量而不是全局声明它们。只是说:)【参考方案2】:

调试或使用

alert(JSON.stringify(result));

有关您将获得什么的更多详细信息

【讨论】:

console.dir(result);也会这样做。【参考方案3】:

您使用的“结果”值是一个包含存储值的对象,要获取您必须使用的值result.keywords,它将获取关键字的值。例如:

function load()
  chrome.storage.local.get('keywords', function(result)
    var keywords = result.keywords;
    alert(keywords);
  );

  chrome.storage.local.get('channels', function(result)
    var channels = result.channels;
    alert(channels);
  );

【讨论】:

不处理代码后面使用keywords的主要问​​题,但在回调运行之前。

以上是关于chrome.storage.local.get 并设置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 chrome set 缩小数组