Firefox扩展-用户交互非活动通知只触发一次



我正在开发一个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秒没有任何活动的情况下执行。

最新更新