【问题标题】:How to use nsITimer in a Firefox Extension?如何在 Firefox 扩展中使用 nsITimer?
【发布时间】:2011-06-06 18:55:40
【问题描述】:

我正在开发一个 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 间隔 = 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/

【问题讨论】:

  • 您不使用setTimeoutsetInterval的任何原因?
  • @Pat:不是特别 - nsITimer 似乎是具有重复计时器的更好解决方案,这似乎与 setTimeout/setInterval 更混乱,特别是因为我在尝试使用 'this '。
  • @Pat:我再次尝试使用 setInterval 并让它工作。使用 setInterval 用我的解决方案更新问题。

标签: javascript firefox-addon settimeout setinterval firefox4


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多