我正在尝试打开一个弹出窗口,等待X秒然后关闭弹出窗口。
(用例是向webapp发送通知 - 但我们不能只是做一个GET请求,因为它需要在同一个会话中,所以我们可以使用登录会话)
我无法使用setTimeout
,因为我们无法在附加组件/扩展程序中使用它
如何在不诉诸CPU周期的情况下获得类似的功能,这显然会导致明显的延迟?
答案 0 :(得分:10)
您可以使用SDK提供的timers模块而不是nsITimer
来获得与浏览器中提供的相同类型的setTimeout / setInterval功能
let { setTimeout } = require('sdk/timers');
function openPopup () {}
setTimeout(openPopup, 3000);
答案 1 :(得分:3)
您可以使用nsITimer。
下面是一个基本示例,但您可以在https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsITimer
的相关文档页面上找到更多信息(包括使用Components.interfaces.nsITimer.TYPE_REPEATING_SLACK作为setInterval的替代方法)。// 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);