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

时间:2011-12-12 14:11:51

标签: firefox-addon notifications observers

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

1 个答案:

答案 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秒后没有任何活动时首先执行。调整超时值以尝试。