2

アプリケーションは物理デバイスにデプロイされているため、開始ページの index.html はデバイスのストレージにあり、このファイルはリモートでホストされている JavaScript ファイルやその他のリソースを参照します。つまり、index.html 自体は Web サーバーでホストされていません。このシナリオで html5 アプリケーション キャッシュを使用することは可能ですか? つまり、html 要素は次のようになります。

<html manifest="http://remotehost.com/site.manifest">

これはサポートされていますか? または、Web サーバーが index.html をホストしていない場合に機能させるための回避策はありますか?

ありがとう!

4

1 に答える 1

4

基本的な要件と制限については、このサイトを確認してください: 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 を設定すると、マニフェストは正常に機能するはずです。

于 2012-05-19T16:25:49.497 に答える