Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome chrome.storage.sync与chrome.storage.local_Google Chrome_Google Chrome Extension - Fatal编程技术网

Google chrome chrome.storage.sync与chrome.storage.local

Google chrome chrome.storage.sync与chrome.storage.local,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我试图了解如何使用chrome.storage.api。 我已在清单.json中包含以下内容: "permissions": [ "activeTab","storage" ], 然后,我用devtools打开了一个新标签,并将切换到我的chrome扩展。比我键入的: chrome.storage.sync.set({"foo":"bar"},function(){ console.log("saved ok"); } ); 得到: undefined saved ok 然后我尝试获取此

我试图了解如何使用chrome.storage.api。 我已在清单.json中包含以下内容:

"permissions": [
"activeTab","storage"
],
然后,我用devtools打开了一个新标签,并将
切换到我的chrome扩展。比我键入的:

chrome.storage.sync.set({"foo":"bar"},function(){ console.log("saved ok"); } );
得到:

undefined
saved ok 
然后我尝试获取此存储值:

chrome.storage.sync.get("foo",function(data){ console.log(data); } );
但这让我:

undefined
Object {} 
然后我也做了同样的事情,但是我没有使用
sync
而是使用
local
,这样做就像预期的那样:

chrome.storage.local.set({"foo":"bar"},function(){ console.log("saved ok"); } );
…以及检索:

chrome.storage.local.get("foo",function(data){ console.log(data); } );
这让我明白了:
Object{foo:bar}
应该是这样的

这是因为我没有在chrome上登录我的帐户吗?但是在这种情况下,
chrome.storage.sync
不是被设计成在本地存储数据吗

编辑

奇怪的是,当我直接在控制台上键入此代码时,它似乎正在工作,但此代码不是从click listener中的background.js代码运行的:

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,函数(数据){console.log(数据);})返回一个空对象,就好像没有存储数据一样:/
这段代码似乎与
chrome.storage.local
配合得很好


chrome.runtime.lastErros
返回
未定义的

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

"permissions": [
  "unlimitedStorage"
]
chrome sync存储的最大大小为:

  • 总共102400字节
  • 每项8192字节
  • 最多512项
  • 每小时1800次写操作
  • 每分钟120次操作
()

哎呀

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

我没有得到chrome.runtime.lastError,因为我错误地将它放在
get
函数范围内,而不是产生错误的
set
函数。因此,我发布这个答案是为了帮助其他有同样困惑的人

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

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\u BYTES\u PER\u ITEM QUOTA extered”}

在一个全新的配置文件中,您的
.get()
调用返回
对象{foo:“bar”}
,这正是我所期望的。你能再检查一下吗?您应该在另一个问题中问另一个问题。@user1555863尝试调用
chrome.runtime.lastError
查看problem@Intuitisoft
chrome.runtime.lastError
返回
未定义的
。请参阅编辑。更改标题,这不是chrome.storage.local vs chrome.storage.sync的问题