4

我正在尝试打开一个弹出窗口,等待 X 秒,然后关闭弹出窗口。

(用例是向 webapp 发送通知——但我们不能只做一个 GET 请求,因为它需要在同一个会话中,所以我们可以使用登录会话)

我不能使用setTimeout,因为我们不能在附加组件/扩展中使用它

我怎样才能获得类似的功能而不诉诸 CPU 周期,这显然会导致明显的延迟?

4

2 回答 2

10

您可以使用 SDK 提供的timers模块来代替nsITimer浏览器中提供的相同类型的 setTimeout/setInterval 功能

let { setTimeout } = require('sdk/timers');

function openPopup () {}

setTimeout(openPopup, 3000);
于 2013-08-03T18:17:46.850 回答
3

您可以使用 nsITimer。

下面是一个基本示例,但您可以在https://developer.mozilla.org/en-US/docs的相关文档页面上找到更多信息(包括使用 Components.interfaces.nsITimer.TYPE_REPEATING_SLACK 作为 setInterval 的替代方法)/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);
于 2013-07-04T12:47:47.137 回答