我正在开发一个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");
}
}
}
};
答案 0 :(得分:1)
MDN docs confirm就是这种情况:
当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秒后没有任何活动时首先执行。调整超时值以尝试。