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,但我不确定如何解决它.
任何帮助是极大的赞赏!
如果尝试在开始时声明变量,则已在内部定义了间隔
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)