Joe*_*nin 1 javascript jquery asynchronous google-chrome-extension
我正在 Chrome 扩展程序中编写用户设置界面。以下是我定义设置的方式:
function Setting(label, type, defaultData) {
this.label = label;
this.type = 'checkbox';
this.defaultData = defaultData;
}
var Settings = {};
Settings['setting-one'] = new Setting('Setting one', 'checkbox', 'true');
Settings['setting-two'] = new Setting('Setting two', 'checkbox', 'true');
Run Code Online (Sandbox Code Playgroud)
以下是我为每个设置设置默认值的方法:
function setDefaultSetting(setting, defaultValue) {
chrome.storage.sync.get(setting, function(results) {
if (!results[setting]) {
// If the setting has not yet been defined, define it now
var dataToSave = {};
dataToSave[setting] = defaultValue;
chrome.storage.sync.set(dataToSave, function() {
debugMsg('set `' + setting + '` to ' + defaultValue);
});
}
});
}
for (var setting in Settings) {
if (Settings.hasOwnProperty(setting)) {
var s = Settings[setting];
if (s.type == 'checkbox') {
setDefaultSetting(setting, s.defaultData);
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。现在我想将设置列表打印为复选框。这是我尝试过的:
function printSettingsModal() {
var output += '<form>';
for (var setting in Settings) {
if (Settings.hasOwnProperty(setting)) {
var s = Settings[setting];
if (s.type == 'checkbox') {
chrome.storage.sync.get(setting, function(results) {
output += '<p><input id="setting-' + setting + '" type="checkbox"';
if (results[setting] == 'true') { output += ' checked="checked"'; }
output += '><label for="setting-' + setting + '">' + s.name + '</label></p>';
});
}
}
}
output += '</form>';
return output;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它chrome.storage.sync.get()是异步的。如何循环遍历设置数组并检索chrome.storage每个设置的关联数据?
实际上,您不必按顺序执行此操作,甚至不必事先明确设置默认值。
chrome.storage.local.get第一个参数有 3 种形式:
"key"(字符串):仅检索一个密钥,就像您所做的那样["key1", "key2"](数组):检索数组中键的所有值{ key1: default1, key2: default2 }(字典对象):检索指定键的所有值,如果提供的默认值不在存储中,则返回该默认值您可以收集想要检索的所有设置并通过一项操作获取它们。
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |