我正在开发一个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/
答案 0 :(得分:2)
nsITimer.init()
将观察者作为第一个参数。您可能希望使用回调:
timer.initWithCallback(function() {sendResults(true); }, 60000, Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
但是window.setInterval()
更容易使用 - 如果你有一个不会消失的窗口(关闭一个窗口会删除与之相关的所有间隔和超时)。