Google chrome chrome.storage.sync与chrome.storage.local
我试图了解如何使用chrome.storage.api。 我已在清单.json中包含以下内容: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 然后我尝试获取此
"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@Intuitisoftchrome.runtime.lastError
返回未定义的。请参阅编辑。更改标题,这不是chrome.storage.local vs chrome.storage.sync的问题