私は厄介な問題を抱えていて、約 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 ページにコメントを追加します。