clearInterval()没有停止setInterval() - Firefox扩展开发

Kot*_*tsu 2 javascript checkbox xul firefox-addon setinterval

我正在修改篡改数据,这将允许我将它观察到的HTTP请求/响应发送到服务器.到目前为止,该功能已正确实施.下一步是自动执行此过程,我希望使用"复选框"类型的工具栏菜单按钮来打开和关闭此功能.

到目前为止,我在.XUL中有一些代码:

<toolbarbutton id="tamper.autosend" label="&tamper.toolbar.autosend;" type="checkbox" oncommand="oTamper.toggleTimer();"/>
Run Code Online (Sandbox Code Playgroud)

而这个功能在我的扩展的主要驱动程序中:

toggleTimer : function() {
 var checked = document.getElementById('tamper.autosend').checked;

 var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);

 consoleService.logStringMessage(checked);

 if (checked) {
        var interval = window.setInterval(function(thisObj) { thisObj.sendResults(true); }, 1000, this);
 }

 else {
        window.clearInterval(interval);
 }
}
Run Code Online (Sandbox Code Playgroud)

使用consoleService我看到'checked'的值确实是正确的.我认为问题在于我如何调用clearInterval,但我不确定如何解决它.

任何帮助是极大的赞赏!

Sen*_*kin 5

如果尝试在开始时声明变量,则已在内部定义了间隔

var interval = 0;
toggleTimer : function() {
 var checked = document.getElementById('tamper.autosend').checked;

 var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);

 consoleService.logStringMessage(checked);

 if (checked) {
        interval = window.setInterval(function(thisObj) { thisObj.sendResults(true); }, 1000, this);
 }

 else {
        window.clearInterval(interval);
 }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

你做错了,每次你想设置新的间隔时,你应该先清除它

clearInterval(intervalID);

console.log('reset timer');

intervalID = setInterval(function () {
    console.log('tick');
}, refreshInterval);
Run Code Online (Sandbox Code Playgroud)