セルタワーがないフィールドでリモートでデータを収集するために、HTML5でオフラインのタブレット/電話アプリを構築しています。オフラインアプリケーションキャッシュマニフェストを使用して、ページをブラウザに保存します。SafariとAndroidで動作させようとしています。
現在、私のサイトには複数の個別のWebページ(index.html、load.html、sync.html)があります。各ページを読み込んで、各ページが読み込まれたときに異なるJavaScriptを実行できるようにしたい。
もともと私はメインインデックスページ(アプリケーションのブートストラップとして機能)を持っていて、メニューボタンがクリックされたときにjQueryの.load()関数を使用してさまざまなページファイル(htmlのスニペットのみ)をメインディスプレイdivにロードしていました。これはiPhoneでかなりうまくいきました。ただし、Androidで試してみて、サイトがすでにキャッシュされていて、デバイスが機内モードになっていてサーバーに接続できない場合、何らかの理由でページが外部ページからHTMLにサイレントに読み込まれないため、空白の画面が表示されます。キャッシュからページをロードするときにAndroidで失敗するjQueryの.load()関数に絞り込みました。
そこで、個々のページを分離し、すべてのHTML、JavaScript、CSSインクルード、およびヘッダーコードを各ページにミラーリングしてみました(あまり効率的ではありません)。したがって、各ページは単独でスタンドアロンで実行できます。これは、AndroidとiPhoneのWebブラウザーで、単純なhrefリンクをたどって他のページをロードするときに問題なく機能しました。ただし、iPhoneでアプリモードに入ると(つまり、Webページをホーム画面に保存して実際のアプリアイコンとして表示され、そこから実行すると、ステータスバーとは別にほぼ全画面表示されます)、メニューアイコンをクリックします。たとえば、sync.htmlをロードすると、フルスクリーンの「アプリ」モードのままではなく、Safariでページが開きます。
iPhoneのフルスクリーン「アプリ」モードでキャッシュする必要がある個別のWebページを開く方法はありますか?画面サイズが小さいので、他のページにSafariが読み込まれるのは望ましくありません。
私が考えることができる他の唯一の方法は、メインのインデックスページのdivにすべてのhtmlスニペットを非表示にし、クリックされたメニューボタンに応じてdivを表示および非表示にすることです。これはよりクリーンで高速に見えるかもしれませんが、それを行うためのより良い方法があるかどうか疑問に思っていますか?