clearInterval() 不会停止 setInterval() - Firefox 扩展开发
Posted
技术标签:
【中文标题】clearInterval() 不会停止 setInterval() - Firefox 扩展开发【英文标题】:clearInterval() is not stopping setInterval() - Firefox Extension Development 【发布时间】:2011-06-14 14:57:21 【问题描述】:我正在修改篡改数据,这将允许我将它观察到的 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,但我不确定如何解决它。
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:如果尝试在开始时声明你的变量,你已经定义了区间
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);
【讨论】:
尽可能避免使用全局变量是件好事。将其存储在 oTamper.interval 中。【参考方案2】:你做错了,每次你想设置新的间隔你应该先清除它
clearInterval(intervalID);
console.log('reset timer');
intervalID = setInterval(function ()
console.log('tick');
, refreshInterval);
【讨论】:
【参考方案3】:您将interval
存储在局部变量中;函数返回后该值丢失,下次您尝试clearInterval
未定义变量时。将区间存储在一个全局变量中:
if (checked)
window.interval = window.setInterval(function(thisObj) thisObj.sendResults(true); , 1000, this);
else
window.clearInterval(interval);
【讨论】:
【参考方案4】:当然,因为interval
被定义为私有变量。在toggleTimer
函数中定义,函数结束时销毁。
使用interval = window.setInterval()
而不是var interval = window.setInterval()
来定义一个全局变量,以便稍后为clearInterval
访问。
以下是 javascript 变量范围的一些示例。 var
用于定义 current 范围内的变量。离开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() 不会停止 setInterval() - Firefox 扩展开发的主要内容,如果未能解决你的问题,请参考以下文章
AS2.0 setInterval 和 clearInterval的用法
javascript 用 clearinterval 停止 setinterval
clearInterval 按钮不停止 setInterval 倒计时
setInterval,为啥只有当 clearInterval 函数高于 setInterval 函数时,计时器才停止?
setInterval 在第一次调用时被跳过,并且 Clearinterval 在调用 Javascript 时没有停止