Firefox 扩展:如何将 javascript 变量的值保存到本地存储?
Firefox extensions: How to save the value of a javascript variable to local storage?
我的扩展程序的弹出窗口有一个复选框:
<div id="popup-content">
<input id="checkBox" type="checkbox">
</div>
现在的设置方式是,如果我单击工具栏上的扩展程序图标并选中弹出窗口中的复选框,当弹出窗口消失时即不会保存复选框的值,即如果我再次打开弹出窗口它显示该复选框未选中。我做了一些搜索,发现我需要使用 storage api
并将变量存储在存储中,但我不确定如何继续。我在 storage api documentation 中看到了示例,但它们都使用键和值而不是简单的变量。这是我的 js 文件现在的样子:
document.getElementById('checkBox').addEventListener('change', function() {
var m = document.getElementById("checkBox").checked;
browser.storage.local.set(m);
alert(browser.storage.local.get("m"));
});
我显然在这里做错了什么,因为我没有收到任何说明复选框值的警告消息。我究竟做错了什么?此外,这只是问题的一半。我该如何设置它,以便在我重新打开弹出窗口时,复选框将显示已选中(如果之前已选中)?
首先,browser.storage.local.set是异步的,所以你的alert注定失败
其次,根据你实际链接的文档,用法如下
document.getElementById('checkBox').addEventListener('change', function() {
var m = document.getElementById("checkBox").checked;
browser.storage.local.set({m})
.then(() => browser.storage.local.get({m:''}))
.then(({m}) => alert(m));
});
弹出窗口打开后,您可以执行以下操作
browser.storage.local.get({m:''}).then(value => document.getElementById("checkBox").checked = !!value);
尽管我不太清楚你在代码中的哪个位置这样做
您的问题的完整解决方案可能如下:
myObject = {};
function writeParameter(a) {document.getElementById("checkBox").checked = !!a.myObject.myKey;}
function saveOptions(e) {
t = document.getElementById("checkBox").checked;
myObject.myKey = t;
browser.storage.local.set({myObject}).this();
e.preventDefault();
}
function restoreOptions() {
browser.storage.local.get('myObject').then(writeParameter);
}
document.addEventListener('DOMContentLoaded', restoreOptions); //Restore defaults on DOM load...
document.getElementById('checkBox').addEventListener("change", saveOptions);
请注意在 browser.storage 对象中使用了 `this()'。在这种情况下可能没有必要使用它,但它与其他形式的记录一起使用。还要确保您的清单文件包含所有正确的条目。
我的扩展程序的弹出窗口有一个复选框:
<div id="popup-content">
<input id="checkBox" type="checkbox">
</div>
现在的设置方式是,如果我单击工具栏上的扩展程序图标并选中弹出窗口中的复选框,当弹出窗口消失时即不会保存复选框的值,即如果我再次打开弹出窗口它显示该复选框未选中。我做了一些搜索,发现我需要使用 storage api
并将变量存储在存储中,但我不确定如何继续。我在 storage api documentation 中看到了示例,但它们都使用键和值而不是简单的变量。这是我的 js 文件现在的样子:
document.getElementById('checkBox').addEventListener('change', function() {
var m = document.getElementById("checkBox").checked;
browser.storage.local.set(m);
alert(browser.storage.local.get("m"));
});
我显然在这里做错了什么,因为我没有收到任何说明复选框值的警告消息。我究竟做错了什么?此外,这只是问题的一半。我该如何设置它,以便在我重新打开弹出窗口时,复选框将显示已选中(如果之前已选中)?
首先,browser.storage.local.set是异步的,所以你的alert注定失败
其次,根据你实际链接的文档,用法如下
document.getElementById('checkBox').addEventListener('change', function() {
var m = document.getElementById("checkBox").checked;
browser.storage.local.set({m})
.then(() => browser.storage.local.get({m:''}))
.then(({m}) => alert(m));
});
弹出窗口打开后,您可以执行以下操作
browser.storage.local.get({m:''}).then(value => document.getElementById("checkBox").checked = !!value);
尽管我不太清楚你在代码中的哪个位置这样做
您的问题的完整解决方案可能如下:
myObject = {};
function writeParameter(a) {document.getElementById("checkBox").checked = !!a.myObject.myKey;}
function saveOptions(e) {
t = document.getElementById("checkBox").checked;
myObject.myKey = t;
browser.storage.local.set({myObject}).this();
e.preventDefault();
}
function restoreOptions() {
browser.storage.local.get('myObject').then(writeParameter);
}
document.addEventListener('DOMContentLoaded', restoreOptions); //Restore defaults on DOM load...
document.getElementById('checkBox').addEventListener("change", saveOptions);
请注意在 browser.storage 对象中使用了 `this()'。在这种情况下可能没有必要使用它,但它与其他形式的记录一起使用。还要确保您的清单文件包含所有正确的条目。