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でも試してみましたが(オフラインモードもあるので)、同じようなことが起こります。
私が間違っていることについて誰かが何か考えを持っていますか?マニフェストがどのように機能するか、明らかなことや誤解したことを見逃したことがありますか?任意の提案をいただければ幸いです。