I am working on a modification of tamper data that will allow me to send the HTTP request/responses it observes to a server. So far, that functionality has been implemented correctly. The next step is to automate this process, and I wish to use a toolbarmenu button of type 'checkbox' to toggle this functionality on and off.
So far I have this bit of code in the .XUL:
<toolbarbutton id="tamper.autosend" label="&tamper.toolbar.autosend;" type="checkbox" oncommand="oTamper.toggleTimer();"/>
And this function in the main driver of my extension:
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);
}
}
Using the consoleService I see that the value of 'checked' is indeed correct. I believe the problem lies with how I am calling clearInterval, but I'm not exactly sure how to remedy it.
Any help is greatly appreciated!
You have defined interval inside if try to declare your variable on the start
You're storing the
interval
in a local variable; the value is lost after the function returns, next time you attempt toclearInterval
an undefined variable. Store the interval in i.e. a global variable instead:Your doing it wrong, each time you want to set the new interval you should clear it first
Ofcourse, because
interval
is defined as a private variable. It is defined in thetoggleTimer
function and is destroyed when the function ends.Use
interval = window.setInterval()
instead ofvar interval = window.setInterval()
to define a global variable that is accessible later forclearInterval
.Below are some examples of the JavaScript variable scope.
var
is used to define a variable in the current scope. Leavingvar
always creates or changes a local variable.