1

ブラウザが非アクティブになったときに通知する必要があるFirefox拡張機能を開発しています(user-interaction-inactive)。以下のコードに示すように、これにオブザーバーを登録しました。

私の問題は、オブザーバーが私の内線番号に1回だけ通知することです。つまり、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 に答える