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

Firefox addon Firefox扩展-用户交互非活动通知仅触发一次,firefox-addon,notifications,observers,Firefox Addon,Notifications,Observers,我正在开发一个firefox扩展,当浏览器处于非活动状态(用户交互处于非活动状态)时,需要通知它。我注册了一名观察员,代码如下 我的问题是观察者只通知我的扩展一次。也就是说,当Firefox应用程序启动时,当我打开其他窗口时,它会在短时间内通知我。但是,当我再次将Firefox推向前台时,请关闭生成的警报(如下所示),然后使用其他应用程序一段时间,此事件将不会再次触发 我们将非常感谢您在这方面提供的任何帮助 observer = WWWUP_EventHandlers.WWWUP_Observ

我正在开发一个firefox扩展,当浏览器处于非活动状态(
用户交互处于非活动状态
)时,需要通知它。我注册了一名观察员,代码如下

我的问题是观察者只通知我的扩展一次。也就是说,当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");    
      }
    }
  }
};  
委员会认为情况是这样的:

当chrome文档有一段时间没有用户活动时发送。 连续不活动期间不会重复通知 句号

但是,反向事件--
用户交互活动
--会持续触发,我们可以利用:

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);
            }
        }
    }
};  
每次激活
用户交互
时,我们都会重置计时器,并注册一个新的
设置间隔
回调。这意味着回调将仅在(至少)10秒后(没有任何活动)首次执行。调整超时值以适应口味。

用户确认情况如下:

当chrome文档有一段时间没有用户活动时发送。 连续不活动期间不会重复通知 句号

但是,反向事件--
用户交互活动
--会持续触发,我们可以利用:

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);
            }
        }
    }
};  

每次激活
用户交互
时,我们都会重置计时器,并注册一个新的
设置间隔
回调。这意味着回调将仅在(至少)10秒后(没有任何活动)首次执行。调整超时值以适应口味。

虽然我同意并感谢您的回答,但您能否给我解释一下为什么它只被解雇一次?为什么它不会在另一次连续活动后检测到不活动后再次触发?@HeshanPerera-我的代码?只要不活动,它就会继续开火。而且,是的,它应该在一系列新的活动之后再次发射。试试看。(重读,我想我有点不清楚。让我重读一遍。)不,不是这个代码。。它工作完美,解决了我的问题。我指的是“非活动用户交互”的工作原理。@HeshanPerera-Ah。我不知道。它显然是这样设计的,但我不知道为什么会做出这样的决定。虽然我同意并感谢你的回答,但你能给我解释一下为什么它只被解雇一次吗?为什么它不会在另一次连续活动后检测到不活动后再次触发?@HeshanPerera-我的代码?只要不活动,它就会继续开火。而且,是的,它应该在一系列新的活动之后再次发射。试试看。(重读,我想我有点不清楚。让我重读一遍。)不,不是这个代码。。它工作完美,解决了我的问题。我指的是“非活动用户交互”的工作原理。@HeshanPerera-Ah。我不知道。它显然是这样设计的,但我不知道为什么会做出这样的决定。