我正在开发一个firefox扩展,当浏览器处于非活动状态时需要通知(user-interaction-inactive
)。我为此注册了一个观察者,如下面的代码所示。
我的问题是观察者只通知我的扩展一次。这意味着,当Firefox应用程序启动时,我将其他窗口带到最前面时,它会在短时间后通知我。但是当我再次打开Firefox,关闭生成的警报(如下所示),然后使用其他应用程序一段时间后,这个事件再也不会触发了。
关于这方面的任何帮助都将非常感谢。
observer = WWWUP_EventHandlers.WWWUP_Observer;
observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(observer, "user-interaction-inactive", false);
WWWUP_EventHandlers = {
WWWUP_Observer : {
observe : function(subject, topic, data){
if(topic.toLowerCase() == "user-interaction-inactive"){
alert("User isn't interacting with the browser");
}
}
}
};
MDN文档证实了这一点:
当chrome文档有一段时间没有用户活动时发送。在连续不活动期间不重复通知时期。
然而,反向事件——user-interaction-active
——确实连续开火,我们可以利用:
WWWUP_EventHandlers = {
timer: undefined,
WWWUP_Observer : {
observe: function(subject, topic, data){
if (topic.toLowerCase() == "user-interaction-active") {
if (WWWUP_EventHandlers.timer)
clearInterval(WWWUP_EventHandlers.timer);
WWWUP_EventHandlers.timer = setInterval(function() {
LOG("User isn't interacting with the browser");
}, 10000);
}
}
}
};
我们重置定时器每次user-interaction-active
触发并注册一个新的setInterval
回调。这意味着回调只会在(至少)10秒没有任何活动的情况下执行。