8

HTML5オフラインアプリケーションキャッシュをASPMVC3Webサイトで機能させようとしています。私が得る問題は、オフラインモードでページに移動しようとすると、それが機能しないことです。

マニフェストファイルのアクションを使用して動的に生成できるようにし、ビューでResonse.ContentType = "text/cache-manifest"を指定します。

アプリケーションをIISでローカルにホストしているので、http://192.168.55.127/mywebsite/を使用してアクセスしています。

これは私が使用しているマニフェストビューです。それはかみそりのビューエンジンを使用していて、何が悪いのかを理解しようとしている間、少し厄介です(ハードコードされたURLなど)。

@{
     Layout = null;
     Response.ContentType = "text/cache-manifest";
}
CACHE MANIFEST

# Version: @ViewBag.Version

CACHE:
#Script Files
@foreach(var jsFile in Url.GetJsFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(jsFile))
}

#Style Sheets
@foreach(var cssFile in Url.GetCssFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(cssFile))
}

#Images
@foreach(var imageFile in Url.GetImageFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(imageFile))
}

#HTML Pages
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/master.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/home.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/options.htm"))

NETWORK:
*

これにより、次のようなパスが生成されます。

http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js
http://192.168.55.127/mywebsite/pages/home.htm

大丈夫そうです。

私もフルパスを使用してマニフェストファイルを参照しました:

<html manifest="http://192.168.55.127/mywebsite/manifest">

サイトをChromeでロードして開発者コンソールを観察すると、エラーをスローせずにすべてのファイルをキャッシュしているように見えるので、これは問題ないようです。また、 http: //192.168.55.127/mywebsite/manifestに移動する と、期待どおりにマニフェストが表示されます。

Webサイトは通常のナビゲーションを使用せず、代わりにハッシュフラグメントを使用してナビゲートします。したがって、ホームにナビゲートするには、URLはmaster.htm#homeになり、オプションの場合はmaster.html#optionsになります。このハッシュ変更はjavascriptによって取得され、ajaxを使用してマスターのdivコンテナーにページをロードします。具体的には、jQueryの「load」メソッドを使用してこれを行います。

これはすべて、オフラインモードでない場合は正常に機能し、ナビゲート時にChromeでネットワークタブを監視している場合、リクエストURLは正しく、マニフェストファイルにリストされているものと同じURLです。私が考えることができる唯一のことは、オフラインモードはajaxリクエストでは機能しないということですが、私はそれが同じように機能するという印象を受けました。

私はFireFox(バージョン9.0)を使用してオフラインモードをテストしています。すべての履歴を消去し、Webサイトのホームページを参照し、オフラインモードを有効にしてから、オプションページに移動しようとしています。ファイアバグでは、オプションページの正しいURLに対するGETリクエストが表示されますが、返されることはなく、エラーも発生しません。ロードホイール(firebugのネットタブのリクエストの横)は、ロード中のように回転し続けます。Opera 11.60でも試してみましたが(オフラインモードもあるので)、同じようなことが起こります。

私が間違っていることについて誰かが何か考えを持っていますか?マニフェストがどのように機能するか、明らかなことや誤解したことを見逃したことがありますか?任意の提案をいただければ幸いです。

4

1 に答える 1

1

(質問が古いことは知っていますが、将来の参考のために...)

AJAX コンテンツ ファイルが AppCache マニフェスト ファイルに適切にリストされている場合 (そうであるように思われます)、これは機能するはずです。個人的には、絶対パスではなく相対パスを使用しますが、違いはありません。

あなたの問題は、マニフェスト ファイルにファイル拡張子がないことのようです。ファイル (および master.htm 内のその参照) の名前を、appcache.manifestまたは類似の名前に変更してみてください。次に、マニフェスト ファイルの MIME タイプがサーバーで設定されていることを確認する必要があります。たとえば、Apache の場合、次のようなものを追加します。

AddType text/cache-manifest .manifest

サーバーの構成ファイルまたは .htaccess ファイルに。

また、テスト時にキャッシュされたデータをクリアするだけでなく、マニフェスト ファイルに変更を加えるときは、ページを少なくとも 2 回更新するようにしてください。これは、ブラウザーが更新を確認し、別のページの読み込みでファイルをダウンロードするためです。

最後に、AJAX でプルしているファイルの URL にパラメータ (?id=1234 など) が含まれているが、マニフェスト ファイルにそのようにリストされていない場合は機能しません。ここではそうではないようですが、注意が必要です。

于 2012-10-06T15:33:58.607 に答える