ユーザのアイドル時間を測定する nsIIdleService

Firefox 3 (Minefield) 以降限定だが、 nsIIdleService を使ってユーザのアイドル時間を測定したり、ユーザが一定時間何も操作しなかったことを検知したり、さらにその状態から操作を開始したことを検知することができる。言わずもがな、メッセンジャーのようなアプリケーションでユーザが退席中かオンラインかを見分ける用途などに最適だ。

nsIIdleService

まずXPCOMサービスを取得する。

gIdleService = Components.classes["@mozilla.org/widget/idleservice;1"]
               .getService(Components.interfaces.nsIIdleService);

現在のアイドル時間を取得するなら、 idleTime プロパティを調べるだけ。単位はミリ秒である。

setInterval(function() {
    document.getElementById("idleTime").value = Math.round(gIdleService.idleTime / 1000) + " 秒";
}, 1000);

ユーザが○○分間何もしなかった(マウスを動かしたりキーボードに触れたりしなかった)ことを検知して何らかの処理を実行するためには、 nsIObserver インタフェースを実装したオブザーバを作る。 observe メソッドへ渡される引数は…

aSubject nsIIdleService 自身
aTopic 指定時間が経過してアイドル状態に突入した場合は「idle」
アイドル状態から通常状態へと戻った場合は「back」
aData 現在のアイドル時間
gIdleObserver = {
    observe: function(aSubject, aTopic, aData) {
        var status;
        switch (aTopic) {
            case "idle": status = " 退席中..."; break;
            case "back": status = " 戻りました"; break;
        }
        document.getElementById("log").value += new Date().toLocaleTimeString() + status + "
";
    }
};

オブザーバを addIdleObserver メソッドで登録する。第2引数はアイドル状態になるまでの時間(単位は分)である。

gIdleService.addIdleObserver(gIdleObserver, 1);

上記サンプルでは、1分間(厳密には+5秒のディレイあり)何も操作しないと「退席中…」が表示され、その後何か操作をすると「戻りました」が表示される。

用が済んだら removeIdleObserver でオブザーバを解除するのをお忘れなく。

gIdleService.removeIdleObserver(gIdleObserver, 1);

» mozilla/widget/public/nsIIdleService.idl

TOP

TOP