gpt4 book ai didi

javascript - 从 chrome.storage 顺序检索多个项目

转载 作者:行者123 更新时间:2023-11-30 12:34:51 25 4
gpt4 key购买 nike

我正在为 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');

以下是我为每个设置设置默认值的方法:

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);
}
}
}

到目前为止,还不错。现在我想将设置列表打印为复选框。这是我尝试过的:

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;
}

这不起作用,因为 chrome.storage.sync.get() 是异步的。如何遍历我的设置数组并为每个设置检索关联的 chrome.storage 数据?

最佳答案

您实际上不必按顺序执行此操作,甚至不必事先明确设置默认值。

chrome.storage.local.get 第一个参数有 3 种形式:

  • "key"(字符串):只检索一个键,正如您正在做的那样
  • ["key1", "key2"](数组):检索数组中键的所有值
  • { key1: default1, key2: default2 }(字典对象):检索指定键的所有值,如果不在存储中则返回提供的默认值

您可以收集所有要检索的设置,并在一次操作中获取它们。

关于javascript - 从 chrome.storage 顺序检索多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26374663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com