1

我正在开发一个 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");    
      }
    }
  }
};  
4

1 回答 1

1

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 秒后没有任何活动的情况下首先执行。根据口味调整超时值。

于 2011-12-12T20:35:42.877 回答