javascript - 脚本不读取复选框

我正在尝试使 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);
  }
}

相似文章

r - 在 R 中计算统计摘要时获取“NA”

我正在尝试将列从因子转换为数字,以便我可以运行统计摘要(平均值、中值、最大值、最小值)。但是,在运行此列的任何统计信息时,我不断得到NA。在运行任何转换代码之前,如果我运行str(),类型是'hms'...