Javascript 如何在不使用setTimeout的情况下在firefox扩展中睡眠?

Javascript 如何在不使用setTimeout的情况下在firefox扩展中睡眠?,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我试图打开一个弹出窗口,等待X秒,然后关闭弹出窗口 (用例是向webapp发送通知-但我们不能只执行GET请求,因为它需要在同一个会话中才能使用登录会话) 我不能使用setTimeout,因为我们不能在附加组件/扩展中使用它 我如何在不占用CPU周期的情况下获得类似的功能,这显然会导致明显的延迟 您可以使用nsITimer 下面是一个基本示例,但您可以在以下相关文档页面上找到更多信息(包括使用Components.interfaces.nsimeter.TYPE_REPEATING_SLACK作

我试图打开一个弹出窗口,等待X秒,然后关闭弹出窗口

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

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

我如何在不占用CPU周期的情况下获得类似的功能,这显然会导致明显的延迟

您可以使用nsITimer

下面是一个基本示例,但您可以在以下相关文档页面上找到更多信息(包括使用Components.interfaces.nsimeter.TYPE_REPEATING_SLACK作为setInterval的替代方法)

对于浏览器中提供的相同类型的setTimeout/setInterval功能,您可以使用SDK提供的模块而不是
nsITimer

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

function openPopup () {}

setTimeout(openPopup, 3000);

我最终还是发现了这一点——效果非常好——谢谢你的回答:)因为Firefox29SDK/timers模块为Firefox22+提供了一个通用的JS API,你可以使用更简单的Timer.jsm。它类似于插件SDK方法,但适用于非SDK插件和较旧的浏览器版本。绝对是自Firefox 29以来的首选选项。
let { setTimeout } = require('sdk/timers');

function openPopup () {}

setTimeout(openPopup, 3000);