Расширение Firefox - уведомление о неактивном взаимодействии пользователя срабатывает только один раз - PullRequest
1 голос
/ 12 декабря 2011

Я разрабатываю расширение 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 Ответ

1 голос
/ 13 декабря 2011

Документы 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 секунд без какой-либо активности. Отрегулируйте время ожидания по вкусу.

...