我试图了解如何使用chrome.storage.api。
我在manifest.json
:
"permissions": [
"activeTab","storage"
],
然后,我用devtools打开了一个新选项卡,并将<page context>
切换到我的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帐户吗?但在这种情况下,isn&t [{1}}是否会设法回退到本地存储数据?
修改
奇怪的是,当我在控制台上直接键入它时,似乎工作正常,但此代码并不是从单击侦听器中的background.js代码运行的:
chrome.storage.sync
运行此操作后,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
答案 0 :(得分:11)
chrome本地存储的最大大小为5,242,880字节。 要扩展存储,可以在manifest.json上添加:
"permissions": [
"unlimitedStorage"
]
Chrome同步存储的最大尺寸为:
(source)
答案 1 :(得分:4)
糟糕!
问题是我试图同步超出大小的数据。 (每项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
一起运行正常,因为according to the docs您只有sync
这个限制。
打印chrome.runtime.lastError
给了我:Object {message: "QUOTA_BYTES_PER_ITEM quota exceeded"}