藪下@2課のガジェオタです。
先週の続きでFxOS勉強会のLTネタ解説5回目を書こうと思っていたんですが、思ったより時間がかかりそうなので別のAPIを 解説することにします。
今回はIdle APIの使い方を見ていきます。
目次
- Idle APIのインターフェイス
- 使い方
Idle APIのインターフェイス
Idle APIの主なメソッドはnavigatorに用意されている以下のメソッドになります。
partial interface Navigator { void addIdleObserver(IdleObserver); void removeIdleObserver(IdleObserver); };
void addIdleObserver(IdleObserver)とvoid removeIdleObserver(IdleObserver)はそれぞれアイドル時とアクティブ時に通知されるハンドラと秒数を表すオブジェクトIdleObserverを受け取ります。
navigator.addIdleObserver(IdleObserver)
addIdleObserverはIdleObserverオブジェクト受け取ってnavigatorに設定します。
アイドル状態になってからIdleObserverオブジェクトに設定された秒数を経過した時点でアイドル状態を知らせるハンドラが呼ばれます。またアクティブ状態になった時アクティブ状態を知らせるハンドラが呼ばれます。
navigator.removeIdleObserver(IdleObserver)
removeIdleObserverはnavigatorからIdleObserverオブジェクトを取り除きます。
removeIdleObserver後は渡したIdleObserverに設定されているハンドラは呼ばれなくなります。
IdleObserver
ここまで何度かIdleObserverという名前が出てきていますが、これはaddIdleObserverとremoveIdleObserverに渡す秒数とハンドラをセットにしたオブジェクトです。
[NoInterfaceObject] interface IdleObserver { attribute long time; // seconds void onidle(); void onactive(); };
timeは非アクティブになってからonidle()が呼び出されるまでの秒数。
onidleが非アクティブになってからtime秒経過した際に呼ばれるハンドラ。
onactiveがアクティブになった際に呼ばれるハンドラです。
使い方
使い方はいつものaddEventListenerと似ています。
navigator.addIdleObserverでIdleObserverを渡せば無操作になってからIdleObserver.time秒後にIdleObserver.onidleが、アクティブ復帰時にIdleObserver.onactiveが呼ばれます。
具体的な例で示すと。
navigator.addIdleObserver({ time: 4, onidle: myIdleHandler, onactive: myActiveHandler});
とした場合ユーザの最後の操作から4秒後にmyIdleHandleerが呼ばれ、ユーザが操作したときにmyActiveHandlerが呼ばれます。
試しに動かしてみました。
以下のリポジトリにサンプルコードを置いたので試す環境がある方は試してみてください。
https://github.com/aoitan/gcg_labo/tree/master/api_reading/20140323_using_Idle_API
Firefox OSで試す場合は、Idle APIがFirefox OSではCertifiedなのでgaiaのビルドが必要になります。
デスクトップとAndroidでは dom.idle-observers-api.enabled というプリファレンスがtrueならIdle APIを使用可能です。
とまあまるで動いたかのように書いてるんですが、動きませんでした。
addIdleObserverがないと怒られます。navigatorのプロパティを覗いてみてもaddIdleObserverがありませんでした。
ちょっとJSから追ってても原因がわからないので次回はAPIの中に進んでみたいと思います。