2012-01-03 3 views
8

ASP MVC 3のWebサイトでHTML 5オフラインアプリケーションキャッシュを使用しようとしています。私が得る問題は、オフラインモードでページに移動しようとすると、 が動作しません。HTML 5のキャッシュマニフェストもajaxリクエストで動作するはずですか?

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

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

これは私が使用しているマニフェストビューです。それはかみそりビューエンジンを使用して、私は何が間違っているかを把握しようとしている間に少し乱雑です(ハードコードされたURLなど) です。罰金のようです

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

@{ 
    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: 
* 

これは、次のようなパスになります。

私はあまりにも完全なパスを使用してマニフェストファイルを参照しています

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

OKであるように思われ、私はクロームでサイトアップをロードし、デベロッパーコンソールを観察するとき、すべてをキャッシュする を表示されますエラーを投げることなくファイルまたhttp://192.168.55.127/mywebsite/manifest に移動すると、マニフェストが表示されます。

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

オフラインモードでないときはすべて正常に動作し、ナビゲートするときにクロムのネットワークタブを確認すると、要求URLは正確であり、マニフェストファイルにリストされているURLと同じです。私が考えることができるのは、オフラインモードがAjaxリクエストでは機能しないということだけですが、同じように動作するという印象を受けました。

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

私が間違っていることについて、どんな考えがありますか?マニフェストがどのように機能すべきか、わかりやすかったり、誤解されたりしましたか?どんな提案も感謝します。

答えて

1

(私は質問の古いが、今後の参考のために知っている...)

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

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

AddType text/cache-manifest .manifest 

をサーバーの設定ファイルまたは.htaccessファイルに追加します。

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

最後に、AJAXを使用しているファイルにURLにパラメータが含まれていると、動作しません。 ?id = 1234ですが、マニフェストファイルには表示されません。それはここにあるようには見えませんが、それは気づくべきことです。

関連する問題