首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >chrome.storage.sync对chrome.storage.local

chrome.storage.sync对chrome.storage.local
EN

Stack Overflow用户
提问于 2014-03-25 13:56:40
回答 2查看 13.3K关注 0票数 13

我试着理解如何使用chrome.storage.api。我在我的manifest.json中包含了以下内容

代码语言:javascript
运行
复制
"permissions": [
"activeTab","storage"
],

于是,我用devtools打开了一个新的选项卡,并将<page context>切换到了我的chrome扩展。比我输入的要多:

代码语言:javascript
运行
复制
chrome.storage.sync.set({"foo":"bar"},function(){ console.log("saved ok"); } );

并得到:

代码语言:javascript
运行
复制
undefined
saved ok 

而不是我试图获得这个存储值:

代码语言:javascript
运行
复制
chrome.storage.sync.get("foo",function(data){ console.log(data); } );

但这件事让我觉得:

代码语言:javascript
运行
复制
undefined
Object {} 

但我没有使用sync,而是使用了local,这与我所期望的一样:

代码语言:javascript
运行
复制
chrome.storage.local.set({"foo":"bar"},function(){ console.log("saved ok"); } );

..and检索:

代码语言:javascript
运行
复制
chrome.storage.local.get("foo",function(data){ console.log(data); } );

这让我大吃一惊:Object {foo: "bar"}就该怎么做。

这是因为我没有登录到我的帐户铬?但在这种情况下,chrome.storage.sync的设计难道不是为了回退到本地存储数据吗?

编辑

奇怪的是,当我在控制台上直接输入这个命令时,它似乎正常工作,但这段代码并不是从单击监听器中的background.js代码中运行的:

代码语言:javascript
运行
复制
var dataCache = {};

function addStarredPost(post)
{
  var id = getPostId(post);
  var timeStamp = new Date().getTime();
  var user = getUserName();

  dataCache[id] = {"id":id,"post":post,"time":timeStamp,"user":user};
  chrome.storage.sync.set(dataCache,function(){ console.log("Starred!");});
}

运行此操作后,chrome.storage.sync.get(null,function(data){ console.log(data); });返回一个空对象,就好像数据没有存储一样。/这段代码似乎与chrome.storage.local完美地工作在一起。

chrome.runtime.lastErros返回undefined

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-11 13:56:01

哇哦!

问题是,我试图同步大小超过的数据。(每项4096字节)

我没有得到chrome.runtime.lastError,因为我错误地将它放在了get函数范围内,而不是生成错误的set函数中。因此,我张贴这个答案,以便它可能会帮助其他人分享同样的困惑。

您应该检查每个api调用中的chrome.runtime.lastError,如下所示:

代码语言:javascript
运行
复制
chrome.storage.local.set(objectToStore, function(data)
{
   if(chrome.runtime.lastError)
   {
       /* error */
       console.log(chrome.runtime.lastError.message);
       return;
   }
  //all good. do your thing..
}

这在chrome.storage.local中运行正常,因为根据医生的说法只对sync有这个限制。

打印chrome.runtime.lastError给我的:Object {message: "QUOTA_BYTES_PER_ITEM quota exceeded"}

票数 6
EN

Stack Overflow用户

发布于 2014-03-26 15:07:23

铬本地存储的最大大小为5,242,880字节。要扩展存储,可以在manifest.json上添加:

代码语言:javascript
运行
复制
"permissions": [
  "unlimitedStorage"
]

铬同步存储的最大大小是:

  • 102,400个字节
  • 每项8 192字节
  • 最大512项
  • 每小时1 800次写入操作
  • 每分钟120次手术

(来源)

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22636771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档