libro
www.tuyano.com
JavaScriptで作ろう! Windows 8 アプリ・プログラミング入門

HTMLとJavaScriptの基本コードを覚えよう! (2/4)

作成:2012-11-10 11:24
更新:2012-11-10 11:24

■JavaScriptのコードをチェック!

続いて、/js/default.jsに用意されているスクリプトの内容をチェックしていきましょう。こちらは、HTMLほど単純ではありません。下のリスト欄にコードを掲載しておきます。Windows Storeアプリ特有の処理がけっこう用意されているのがわかるでしょう。

まず、スクリプトそのものが以下のような匿名関数にまとめられていることがわかります。
(function(){ ……処理…… })();
別に普通に処理を書いても動くのですが、わざわざ匿名関数を用意しているのは、「その中で作成した変数や関数などをグローバルに公開しないため」です。実行する処理をただずら~っと書いた場合、そこで用意した変数はすべてグローバル変数になり、どこからでもアクセスできるようになります。これはWebページなどではなく、アプリですから、そんな「外部からいつでもどこでもアクセスできる」という形で用意しておくのはセキュリティ上、よろしくありません。そこで匿名関数というわけです。
"use strict";
これは、「strictモード」でスクリプトを実行するための記述です。strictモードというのは、通常のJavaScriptより厳格にコードを実行するためのものです。例えば、varを付けずに変数を使い始めるのを禁止したりしています。
WinJS.Binding.optimizeBindingReferences = true;
これは宣言型バインドを行う際のメモリリークを防ぐためのものです。といってもなんだかわからないと思いますが、「アプリではこれを書いておく」と考えてください。
var app = WinJS.Application;
アプリケーションを管理するオブジェクトを変数に取り出します。このApplicationのメソッドなどを呼び出して必要な処理を行い、最後にstartすることでアプリケーションがスタートします。
var activation = Windows.ApplicationModel.Activation;
アクティベーション(アクティブ化、アプリがアクティブになること)を管理するオブジェクトを変数に取り出します。
app.onactivated = function (args) {……}
アプリがアクティブになったときのイベントonactivatedで実行する処理を設定しています。ここでは、起動時の初期化処理や、アプリがアクティブに切り替わった時の処理などを以下のようにして用意しています。
if (args.detail.kind === activation.ActivationKind.launch) {
    if (args.detail.previousExecutionState !==
        activation.ApplicationExecutionState.terminated) {
        // TODO: このアプリケーションは新しく起動しました。ここでアプリケーションを
        // 初期化します。
    } else {
        // TODO: このアプリケーションは中断状態から再度アクティブ化されました。
        // ここでアプリケーションの状態を復元します。
    }
    args.setPromise(WinJS.UI.processAll());
}
activation.ActivationKind.launchは、アプリケーションがラウンチした時のアクティブ化を示す定数です。この中で、previousExecutionStateというものがactivation.ApplicationExecutionState.terminatedかどうかをチェックしていますが、これはその前の状態が終了していた(つまり新たに起動した)ことを示します。このif文で、新たに起動した時と、アプリが切り替わってアクティブになった時の処理を用意するためのものなのです。
app.oncheckpoint = function (args) {……};
これは、アプリが中断されるときのイベント処理です。ここで、中断される時に現在の状況などを保存したりする処理を用意しておきます。
app.start();
最後に、必要な処理がひと通り終わったら、startを呼び出してアプリケーションをスタートさせます。これで、アプリが開始されます。


――細々とした処理は別に今すぐ覚える必要はありません。「WinJS.Applicationstartしてアプリが開始される」という点、そして「WinJS.Applicationonactivatedイベントで、アクティブ化したときの初期化処理などが用意できる」という点、この2つだけでもしっかり覚えておくとよいでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※default.jsのソースコード

(function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
                // TODO: このアプリケーションは新しく起動しました。ここでアプリケーションを
                // 初期化します。
            } else {
                // TODO: このアプリケーションは中断状態から再度アクティブ化されました。
                // ここでアプリケーションの状態を復元します。
            }
            args.setPromise(WinJS.UI.processAll());
        }
    };

    app.oncheckpoint = function (args) {
        // TODO: このアプリケーションは中断しようとしています。ここで中断中に
        // 維持する必要のある状態を保存します。中断中に自動的に保存され、
        // 復元される WinJS.Application.sessionState オブジェクトを使用
        // できます。アプリケーションを中断する前に非同期操作を完了する
        // 必要がある場合は、args.setPromise() を呼び出して
        // ください。
    };

    app.start();
})();
※関連コンテンツ

「JavaScriptで作ろう! Windows 8 アプリ・プログラミング入門」に戻る