Monacaでアプリ開発をするときに気をつけなければいけない点として、使いたい機能が使える状態になっているかが挙げられます。

Cordovaプラグインを組み込んだ場合は、JavaScriptからネイティブ機能へアクセスが可能になっていないとCordovaプラグインの機能を利用することはできません。また、Onsen UIを利用する場合も、Onsen UIのコンポーネントの読み込みが完了していないと利用することができません。

そこで今回は、Monacaで開発したアプリが起動した時のJavaScriptのイベント発生順序を見ていきたいと思います。

イベント発生順序は、以下になります。

順番 イベント名 発生のタイミング
1 DOMContentLoaded HTMLのすべてのDOM要素が読み込まれた時に発生します。
2 load HTMLのレンダリングに必要なリソースがすべて読み込まれた時に発生します。
3 deviceready JavaScriptからネイティブ機能へアクセスが可能になった時に発生します。
4 ons.ready Onsen UIコンポーネントの読み込みが完了し、devicereadyイベントの後に発生します。

Monacaで開発するアプリでCordovaプラグインやOnsen UIを使用する場合は、このように発生するイベントの順番を意識する必要があります。

イベントの発生順序は、次のHTML内の<script>タグで確認できます。
注意点として、MonacaクラウドIDEのプレビューでは、実機での発生順序とは異なった動きになります。
テストをする場合は、実機をお使いください。

<script src="components/loader.js"></script>
<script>

    document.addEventListener('DOMContentLoaded', function() {
        alert('DOMContentLoaded');
    }, false);

    window.addEventListener('load', function() {
        alert('load');
    }, false);

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

    // Onsen UIを使用している場合
    ons.bootstrap();
    ons.ready(function() {
        alert('Onsen UI ready');
    });

</script>

Android端末で検証してみました。
このJavaScriptが実行されると、

順番 メッセージ
1 DOMContentLoaded
2 load
3 deviceready
4 Onsen UI ready

の順番で実行されることを確認することができます。

devicereadyイベントは、loadイベントの後に発生します。
HTMLのレンダリングに必要なリソースが多い場合は、その分devicereadyイベントの発生が遅れることになります。CordovaプラグインやOnsen UIを利用する際は、この点も注意する必要があります。

Monacaでのアプリ開発で、

「Cordovaプラグインが動作していないのでは?」
「Onsen UIが動作していないのでは?」

と感じた時は、一度CordovaプラグインやOnsen UIが利用可能な状態になっているかどうか確認してみてください。