clearInterval()不会停止setInterval()-Firefox扩展开发

|| 我正在修改篡改数据,这将允许我将其观察到的HTTP请求/响应发送到服务器。到目前为止,该功能已正确实现。下一步是自动化此过程,我希望使用类型为“复选框”的工具栏菜单按钮来启用和禁用此功能。 到目前为止,我在.XUL中有以下代码:
<toolbarbutton id=\"tamper.autosend\" label=\"&tamper.toolbar.autosend;\" type=\"checkbox\" oncommand=\"oTamper.toggleTimer();\"/>
这个功能在我的扩展程序的主驱动程序中:
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);
 }
}
使用consoleService我看到\'checked \'的值确实正确。我相信问题在于我如何调用clearInterval,但我不确定如何解决它。 任何帮助是极大的赞赏!     
已邀请:
        如果尝试在开始时声明变量,则已在内部定义了间隔
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);
 }
}
    
        您做错了,每次您要设置新间隔时,都应先清除它
clearInterval(intervalID);

console.log(\'reset timer\');

intervalID = setInterval(function () {
    console.log(\'tick\');
}, refreshInterval);
    
        您正在将
interval
存储在局部变量中;函数返回后,该值将丢失,下次您尝试对“ 5”未定义的变量进行操作时。将时间间隔存储在全局变量中:
 if (checked) {
        window.interval = window.setInterval(function(thisObj) { thisObj.sendResults(true); }, 1000, this);
 }

 else {
        window.clearInterval(interval);
 }
    
        当然,因为
interval
被定义为私有变量。它在
toggleTimer
函数中定义,并在函数结束时销毁。 使用
interval = window.setInterval()
而不是
var interval = window.setInterval()
定义全局变量,稍后可以对
clearInterval
访问。 以下是JavaScript变量范围的一些示例。
var
用于定义当前作用域中的变量。离开
var
总是创建或更改局部变量。
function func1() {
    i = 1; // global
}
func1();
alert(i); // 1

var j = 2;
function func2() {
    var j = 3; // private
}
func2();
alert(j); // 2

k = 4;
function func3() {
    k = 5; // global
}
func3();
alert(k); // 5

var l = 6;
function func4() {
    l = 7; // global
}
func4();
alert(l); // 7

function func5() {
    var m = 6; // private
}
func5();
alert(m); // undefined
    

要回复问题请先登录注册