我正在制作Google Chrome扩展程序,我想检查chrome.storage.sync
中是否设置了密钥。
示例:
我想查看密钥'links'
:
if (chrome.storage.sync.get('links',function(){
// if already set it then nothing to do
}));
else{
// if not set then set it
}
任何有用的建议都将受到赞赏。
答案 0 :(得分:16)
首先,由于chrome.storage
是异步的,所以必须在回调中完成所有操作 - 你不能在if...else
之外进行,因为不会返回任何内容。无论Chrome如何回答查询,它都会将回传作为键值字典传递给回调(即使您只需要一个键)。
所以,
chrome.storage.sync.get('links', function(data) {
if (/* condition */) {
// if already set it then nothing to do
} else {
// if not set then set it
}
// You will know here which branch was taken
});
// You will not know here which branch will be taken - it did not happen yet
值undefined
与不存储之间没有区别。所以你可以测试一下:
chrome.storage.sync.get('links', function(data) {
if (typeof data.links === 'undefined') {
// if already set it then nothing to do
} else {
// if not set then set it
}
});
尽管如此,chrome.storage
对此操作有更好的模式。您可以为get()
提供默认值:
var defaultValue = "In case it's not set yet";
chrome.storage.sync.get({links: defaultValue}, function(data) {
// data.links will be either the stored value, or defaultValue if nothing is set
chrome.storage.sync.set({links: data.links}, function() {
// The value is now stored, so you don't have to do this again
});
});
设置默认值的好地方是启动时;
chrome.runtime.onStartup和/或chrome.runtime.onInstalled
事件最适合。