Cordova イベント

Cordova ではアプリケーションから利用できるイベントがいくつか用意されています。

例えば、端末が起動しプログラムの実行の準備ができたことを示す deviceready イベントや、 プログラムが一時停止状態になったことを示す pause イベント、 プログラムが再開したときの resume イベントなどです。

以前はネットワークの online、offline なども、「ライフサイクルイベント」としてひとまとめに含められていましたが、 現在はそれらは Cordova のコアのイベントとされていません。

ネットワーク関連のイベントなどは Network Information プラグインのイベントに分類されています。

ここでは、deviceready、pause、resume のイベントハンドラをセットし、イベントが呼ばれたときにハンドラ名を記録し、 イベントが確かに呼ばれることを確認してみましょう。

新しくプロジェクトを作成します。

$ cordova create myapp1

作成されたサブディレクトリに移動します。

$ cd myapp1

プラットフォームとして browser と android を追加します。

$ cordova platform add browser
$ cordova platform add android

コードを編集します。

www/index.html は次の通り。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline';">
        <meta name="viewport" content="user-scalable=no, initial-scale=1,width=device-width">
        <title>Event Test</title>
    </head>
    <body style="font-family: sans-serif;">
      <div id="log"></div>
      <script type="text/javascript" src="cordova.js"></script>
      <script type="text/javascript" src="js/index.js"></script>
      <script>
      init();
      </script>
    </body>
</html>

Content-Security-Policy は、js/index.js を読み込むのと、script タグ内で init を呼び出しているところから、'self' と 'unsafe-inline' を設定しています。

cordova.js は基本的に常に読込みます。

最後に index.js 内の関数 init を呼んでいます。

www/js/index.js は次の通り。

function init() {
  document.addEventListener('deviceready', onDeviceReady, false);
}

function onDeviceReady(){
  appendLog("onDeviceReady()");
  document.addEventListener('pause', onPause, false);
  document.addEventListener('resume', onResume, false);
}

function onPause(){
  appendLog("onPause()");
}

function onResume(){
  appendLog("onResume()");
}

function appendLog(s){
  var log = document.getElementById('log');
  log.innerHTML += "<br>" + s;
}

初期化時に deviceready イベントのリスナだけ設定。deviceready にて resume と pause を設定しています。

browser での動作確認は次の通りです。

$ cordova build browser
$ cordova serve

上記コマンド実行後、ブラウザから動作確認できます。

ブラウザのタブを切り替え戻ると、onPause、onResume が追加されていくのがわかります。

android での動作確認は次の通り。

$ cordova run android