Как использовать nsITimer в расширении Firefox? - PullRequest
2 голосов
/ 06 июня 2011

Я работаю над расширением 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 (won)Позвольте мне опубликовать более двух гиперссылок)

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

1 Ответ

2 голосов
/ 06 июня 2011

nsITimer.init() принимает наблюдателя в качестве первого параметра. Вы, вероятно, хотите использовать обратный вызов вместо:

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

Но window.setInterval() тем не менее проще в использовании - если у вас есть окно, которое не исчезнет (закрытие окна удаляет все связанные с ним интервалы и тайм-ауты).

...