Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearInterval()没有停止setInterval()-Firefox扩展开发_Javascript_Checkbox_Firefox Addon_Xul_Setinterval - Fatal编程技术网

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

Javascript clearInterval()没有停止setInterval()-Firefox扩展开发,javascript,checkbox,firefox-addon,xul,setinterval,Javascript,Checkbox,Firefox Addon,Xul,Setinterval,我正在修改篡改数据,这将允许我将它观察到的HTTP请求/响应发送到服务器。到目前为止,该功能已经正确实现。下一步是自动化这个过程,我希望使用“checkbox”类型的工具栏菜单按钮来打开和关闭这个功能 到目前为止,我在.XUL中有以下代码: <toolbarbutton id="tamper.autosend" label="&tamper.toolbar.autosend;" type="checkbox" oncommand="oTamper.toggleTimer();"/&

我正在修改篡改数据,这将允许我将它观察到的HTTP请求/响应发送到服务器。到目前为止,该功能已经正确实现。下一步是自动化这个过程,我希望使用“checkbox”类型的工具栏菜单按钮来打开和关闭这个功能

到目前为止,我在.XUL中有以下代码:

<toolbarbutton id="tamper.autosend" label="&tamper.toolbar.autosend;" type="checkbox" oncommand="oTamper.toggleTimer();"/>
使用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
未定义变量时,函数返回后该值将丢失。将间隔存储在全局变量中:

 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
总是创建或更改局部变量

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

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

clearInterval(intervalID);

console.log('reset timer');

intervalID = setInterval(function () {
    console.log('tick');
}, refreshInterval);

只要有可能,最好尽量避免使用globals。将其存储在oTamper.interval中。
clearInterval(intervalID);

console.log('reset timer');

intervalID = setInterval(function () {
    console.log('tick');
}, refreshInterval);