Как спать в расширении Firefox без использования setTimeout?
Я пытаюсь открыть всплывающее окно, подождать X секунд, а затем закрыть всплывающее окно.
(Вариант использования - отправка уведомления в веб-приложение, но мы не можем просто выполнить запрос GET, так как он должен быть в том же сеансе, чтобы мы могли использовать сеанс входа в систему)
Я не могу использовать setTimeout
как мы не можем использовать его в дополнениях / расширениях
Как я могу получить аналогичную функциональность, не прибегая к жеванию циклов процессора, что, очевидно, вызывает заметную задержку?
2 ответа
Вы можете использовать nsITimer.
Ниже приведен базовый пример, но вы можете найти дополнительную информацию (включая использование Components.interfaces.nsITimer.TYPE_REPEATING_SLACK в качестве альтернативы setInterval) на соответствующей странице документации по адресу https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsITimer
// we need an nsITimerCallback compatible interface for the callbacks.
var event = {
notify: function(timer) {
alert("Fire!");
}
}
// Create the timer...
var timer = Components.classes["@mozilla.org/timer;1"]
.createInstance(Components.interfaces.nsITimer);
// initialize it to call event.notify() once after exactly ten seconds.
timer.initWithCallback(event,10000, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
Вы можете использовать модуль таймеров, предоставляемый SDK вместо nsITimer
для того же вида функций setTimeout/setInterval, предоставляемых в браузерах
let { setTimeout } = require('sdk/timers');
function openPopup () {}
setTimeout(openPopup, 3000);