基本的な要件と制限については、このサイトを確認してください:
http://appcachefacts.info/
ファイルがデバイスのストレージに展開されている場合、appcache が機能しない原因がいくつかあります。
Cross-Origin-Policy
: 別のオリジンからマニフェスト ファイルを参照しています -> 許可されていません
WebKit
: index.html をレンダリングする WebView が WebKit を使用していると仮定します (iOS/Android)。デスクトップ PC で Safari と Chrome を使用していくつかのテストを行ったところ、マニフェストがCross-Origin-Policy を尊重していても、index.html が URLhttp://localhost
から提供されている場合、マニフェストが無視されることがわかりました。ほとんどの場合file://...
、デバイスにローカルに展開された index.html が提供されるため、これはあなたを襲います。file://...
そこで、マニフェストをデバイスにダウンロードして、index.html で参照するというアイデアを思いつきました。これにより、修正できなかった追加の問題がいくつか発生します (私のセットアップは PhoneGap、jQueryMobile、iOS でした)。
Mime-Type
: マニフェスト (デバイスのストレージから提供される) が正しい MIME タイプ ヘッダーで提供されることを保証することはできませんが、それらがないと、ブラウザーはマニフェストを無視します。
Manifest-URI
: 定義済みの属性を持つ index.html ファイルを (ハードコーディングして) 配布する方法はありません (manifest="uri/to/appCacheManifest.manifest"
この URI を知る前にサーバーからダウンロードして保存する必要があるため)。さらに、PhoneGap アプリケーション (www フォルダー) で配布されたアセットを操作して、何らかの方法で属性を変更することはできません。
これまで、マニフェストを PhoneGap WebView 内で動作させることができませんでした。(iOS) WebView がマニフェスト ファイルを操作できないと述べた記事をいくつか読みましたが、これは正しくありません。モバイル ブラウザ経由で Web アプリケーションに移動し、ホーム画面にブックマークを保存すると、iOS はこのサイトを WebView に埋め込みます。私は自分のアプリケーション (Web サーバーによって提供され、PhoneGap に埋め込まれていない) でこれを試しましたが、マニフェストは問題なく動作しました。
つまり、「デバイスのストレージにある」ファイルを Web サーバーに移動でき、その場所を指すようにネイティブ WebView を設定すると、マニフェストは正常に機能するはずです。