2011-12-12 39 views
1

我正在開發一個Firefox瀏覽器未激活時需要通知的擴展(user-interaction-inactive)。我爲此註冊了一個觀察者,如下面的代碼所示。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");  
     } 
    } 
    } 
}; 

回答

1

MDN docs confirm即是這種情況:

當鉻文檔看到一段時間內沒有用戶活動發送。 在連續不活動期間不會重複通知 期間。

然而,相反的情況 - 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秒之後首先執行而沒有任何活動。調整超時值來品嚐。

+0

雖然我同意並欣賞你的回答,你能否給我一個解釋,爲什麼它只被解僱一次?爲什麼在另一次活動之後沒有檢測到非活動狀態後,它會再次失敗? –

+0

@HeshanPerera - 我的代碼?只要不活動,它就會繼續射擊。而且,是的,在新的活動結束後它應該再次開火。試試看。 (重新閱讀,我覺得我有點不清楚,讓我重新說一下。) –

+0

沒有這個代碼..它完美的工作,解決了我的問題。我指的是「用戶交互非活動」如何工作。 –