Cordova と jQuery Mobile を使用して、単純な 4 画面の Android アプリケーションを作成してきました。さまざまな画面が、data-role="page" 属性を持つ DIV として HTML の 1 ページ内に配置されます。基本的に、複数ページのサンプル テンプレートを jQuery Mobile のドキュメントからコピーしました。
http://jquerymobile.com/test/docs/pages/page-anatomy.html
ページ間のナビゲーションは、各ページの下部に固定されたナビゲーション バーを介して行われます。ここでも、jQuery Mobile ドキュメントで提案されているコードをほとんど変更せずに使用しました。
<div data-role="footer" data-id="appNavBar" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="#homePage" data-icon="home" data-transition="none" class="ui-btn-active ui-state-persist">Home</a></li>
<li><a href="#historyPage" data-icon="grid" data-transition="none">History</a></li>
<li><a href="#settingsPage" data-icon="gear" data-transition="none">Settings</a></li>
<li><a href="#aboutPage" data-icon="info" data-transition="none">About</a></li>
</ul>
</div>
</div>
次のように、さまざまな Javascript ライブラリが HTML ページの head セクションに含まれています (application.js にはアプリのロジックが含まれています)。
<head>
<title>Redacted</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="jquery/RedactedTheme.min.css" />
<link rel="stylesheet" href="jquery/jquery.mobile.structure-1.1.0.min.css" />
<link rel="stylesheet" href="application.css" />
<script type="text/javascript" src="jquery/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="jquery/jquery.mobile-1.1.0.min.js"></script>
<script type="text/javascript" src="flot/jquery.flot.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-1.7.0.js"></script>
<script type="text/javascript" charset="utf-8" src="statusbarnotification.js"></script>
<script type="text/javascript" charset="utf-8" src="application.js"></script>
</head>
Cordova のロードが完了し、使用できるようになると、「deviceready」シグナルが発行されます。Cordova のドキュメントでは、すべてのセットアップ コードをそのシグナルに関連付けられたイベント リスナーにバインドすることを推奨しています。私はapplication.jsで次のようにしました:
function onDeviceReady() {
console.debug("Cordova initialized.");
setup();
}
document.addEventListener("deviceready", onDeviceReady);
setup() は、ブラウザーの Web SQL データベースとストレージから情報を読み取る関数であり (ここで定義されている Cordova API を使用)、アプリケーションの起動間でユーザー設定と使用情報を維持します。
問題は次のとおりです。jQuery Mobile は jQuery ajax メソッドを使用して最初のページの後に後続のページをロードし、そうすることで head セクションを取り除き、データを含む DIV に直接スキップするという印象を受けました。 -role="page" 属性と適切な ID。代わりに私が観察しているのは、アプリケーションの新しいページにアクセスするたびに、head セクションのスクリプトがリロードされているように見えることです。これは、セッションで初めてページにアクセスしたときに発生し、その後停止します。
Cordova が再初期化されており、deviceready 信号が再び発信されているようです。Eclipse で LogCat を使用すると、onDeviceReady 関数に配置したデバッグ メッセージを確認できます。setup() 関数も再度呼び出されています。これにより、処理が大幅に遅くなります。
私がどこで間違っているのか誰か知っていますか?Cordova が 1 回だけ読み込まれるようにする方法はありますか?
ありがとう、エヴァン