我正在尝试使 chrome 扩展在选中复选框时每隔指定时间刷新站点。此时我面临的问题是,当复选框被选中时我的网站没有刷新,所以它在超时时间后也不会重新启动。你能帮我解决这个问题吗? html
<input type="checkbox" class="timer" name="timer" value="yes" id="timer" onclick="validate">
js
function validate() {
if (document.getElementById('timer').checked) {
for (var i = 0; i < 6; i++) {
setTimeout(function () {
chrome.tabs.query({ active: true, currentWindow: true }, function (arrayOfTabs) {
var code = 'window.location.reload();';
chrome.tabs.executeScript(arrayOfTabs[0].id, { code: code });
});
}, 501);
}
}
}
值得注意的是,如果单击复选框,我已经准备好脚本来保存信息,因此单击弹出窗口后它不会消失
(function zzz() {
// variable to store our current state
var cbstate;
window.addEventListener('load', function () {
cbstate = JSON.parse(localStorage['CBState'] || '{}');
for (var i in cbstate) {
var el = document.querySelector('input[name="' + i + '"]');
if (el) el.checked = true;
}
var cb = document.getElementsByClassName('timer');
for (var i = 0; i < cb.length; i++) {
cb[i].addEventListener('click', function (evt) {
if (this.checked) {
cbstate[this.name] = true;
}
else if (cbstate[this.name]) {
delete cbstate[this.name];
}
localStorage.CBState = JSON.stringify(cbstate);
});
}
});
})();
回答1
2 件事。将括号放在您的函数名称旁边,并在您的函数中添加一些逻辑,以便它清除超时并重置它。否则,如果有人取消选中/选中,您最终可能会关闭大量计时器
<input ... onclick="validate()">
在你的脚本中,我不明白 FOR 循环的作用,所以我在这里省略了它。
let timerInt;
function validate() {
clearTimeout(timerInt)
if (document.getElementById('timer').checked) {
timerInt = setTimeout(function() {
chrome.tabs.query({
active: true,
currentWindow: true
}, function(arrayOfTabs) {
var code = 'window.location.reload();';
chrome.tabs.executeScript(arrayOfTabs[0].id, {code: code});
});
}, 501);
}
}