1

私は厄介な問題を抱えていて、約 2 日間困惑していました。

フレームワークに jQuery mobile を使用して PhoneGap アプリケーションを開発しました。私は最初にAndroidで開発しましたが、すべてうまくいきました。

今ではクロスプラットフォームであるはずですが、iPhone に持ち込んだとき、スプラッシュ スクリーンを通過できませんでした。私はいくつかの赤いニシンをたどりましたが、最終的に JavaScript の問題に集中することができました。

$.mobile.changePage問題を引き起こしたのは、プログラム実行の早い段階での呼び出しでした。問題のあるコード行をコメントアウトすると、スプラッシュ画面を通過し、Safari 開発コンソールからステートメントをリモートで実行すると、問題なく動作したため、ある種の競合状態のようです。私のフラストレーションに加えて、iPad の Safari ブラウザでも問題なく動作しましたが、PhoneGap アプリ内ではさらに奇妙でした。

ここのjQueryモバイルgithubの問題ページから得た回避策としてsetTimeoutを使用するといういくつかのアドバイスに従いました: https://github.com/jquery/jquery-mobile/issues/3190

これでうまくいきました(ありがたいことに!!)。しかし、私は何か間違ったことをしていますか?プログラムの実行に遅延を追加するだけでなく、より良い解決策があるはずだと思います。

コードは次のとおりです。

$(document).on('pageinit', '#home', onHomePageInit);     

function onHomePageInit() {
    $("#home").on("pageshow", checkTokenAndSync());
}

function checkTokenAndSync() {
    // check for stored values
    var storedId = window.localStorage.getItem('id');
    var tokenValue = window.localStorage.getItem('token');

    if(storedId == null || tokenValue == null) {
        // no token value found, direct user to login screen to obtain one

        // This doesn't work.  Need to use setTimeout as below
        // $.mobile.changePage("#loginDialog");

        window.setTimeout(changeToLoginDialog, 1000);
    }   
}

function changeToLoginDialog() {
    $.mobile.changePage("#loginDialog");
}

その github issue ページにコメントを追加します。

4

1 に答える 1