如何在Firefox扩展中使用nsITimer?

时间:2011-06-06 18:55:40

标签: javascript firefox-addon settimeout setinterval firefox4

我正在开发一个Firefox扩展程序,并且希望每隔60秒使用一个计时器来控制数据发布。

以下内容放在主.js文件中的初始化函数中:

var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
timer.init(sendResults(true), 60000, 1);

但是,当我尝试运行此操作时,我在Firefox控制台中收到以下错误:

"Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsITimer.init]" nsresult: "0x80004003"...

等等。我做错了什么?

更新

以下方法可以满足我的需求,但使用nsITimer的初始问题仍然存在:

var interval = window.setInterval(function(thisObj){thisObj.sendResults(true);},1000,this);    }

有用的链接解释了为什么这有效(关于setInterval / sendResults的文档,以及'this'问题的解决方案:

https://developer.mozilla.org/En/DOM/window.setTimeout https://developer.mozilla.org/En/Window.setInterval(不允许我发布两个以上的超链接)

http://klevo.sk/javascript/javascripts-settimeout-and-how-to-use-it-with-your-methods/

1 个答案:

答案 0 :(得分:2)

nsITimer.init()将观察者作为第一个参数。您可能希望使用回调:

timer.initWithCallback(function() {sendResults(true); }, 60000, Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);

但是window.setInterval()更容易使用 - 如果你有一个不会消失的窗口(关闭一个窗口会删除与之相关的所有间隔和超时)。