9

アプリケーション キャッシュで遊んでいて、swapCache 機能に問題があります。

世界で最も単純なキャッシュ マニフェスト ファイルを作成しました。

CACHE MANIFEST
# Timestamp: 2013-03-01 11:28:49

CACHE:
media/myImage.png

NETWORK:
*

アプリケーションを初めて実行すると、コンソールに次のように表示されます。

Creating Application Cache with manifest http://blah_blah/offline.appcache
Application Cache Checking event
Application Cache Downloading event
Application Cache Progress event (0 of 1) http://blah_blah/media/myImage.png
Application Cache Progress event (1 of 1)
Application Cache Cached event

これまでのところすべて順調です。次に、イメージを入れ替えてマニフェスト ファイルのタイムスタンプを変更すると、次のようになります。

Adding master entry to Application Cache with manifest http://blah_blah/offline.appcache
Application Cache Downloading event
Application Cache Progress event (0 of 2) http://blah_blah/media/myImage.png
Application Cache Progress event (1 of 2) http://blah_blah/Widget/?invoke=myWidgetFunctionName
Application Cache Progress event (2 of 2)
Application Cache UpdateReady event

その時点で applicationCache.swapCache() 関数が呼び出され、DOM 例外 11 エラーが発生します。

Web サーバー上で MIME タイプがすべて正しく構成されている。

誰でもアイデアを持っています/正しい方向に私を向けることができますか? (一般的にリンクされている appcache のものをすべてオンラインで読みましたが、何が間違っているのかわかりません)

ありがとう!

編集:

以下のコメントで述べたように、 *.appcache ファイルの有効期限が切れるヘッダーを Web サーバーに設定すると、DOM 例外エラー (!?) が引き続き発生しますが、機能しているようです。役立つ可能性のある次のブログ エントリを見つけました: オフライン アプリ キャッシュの修正の可能性 INVALIDSTATEERR

...しかし、クライアント側で MIME タイプを設定する方法がわかりません。私のgoogle-Fuスキルは私を見捨てました。誰?

4

2 に答える 2

1

同じ問題がありました。しばらくの間、ブラウザがクロムでない場合はキャッシュを無効にしましたが、MIME タイプを推奨どおりに設定して、もう一度試すことにしました。を呼び出したときに Firefox が例外をスローしなくなり、swapCache()更新プロセス全体が期待どおりに機能するようになりました。リクエストは Web ページではなくブラウザから開始されるため、MIME タイプはサーバー側で設定する必要があります。そのため、レスポンスの読み取り方法を制御することはできません。ここにはいくつかのオプションがあります。Apache または IIS を使用している場合は、koko が提案したとおりに実行できます。ルーティングを処理するフレームワークを使用していて、URL から応答へのマッピング (rails や python wsgi サーバーなど) を構成している場合は、通常、コンテンツ タイプを手動で設定できます。これは、Bottle.py (WSGI ベース) を使用して Python アプリで使用しているもののスニペットです。

# BEFORE
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False)
def serve_cache_manifest(path):
    return bottle.static_file(path, SITE_DIR)

# AFTER
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False)
def serve_cache_manifest(path):
    return bottle.static_file(path, SITE_DIR, mimetype='text/cache-manifest')

ボトルには、私が使用している戻り静的ファイルを処理するユーティリティ関数が付属しています。MIME タイプを設定するオプションのパラメーターがあります。

tl;drサーバー構成に MIME タイプを追加できない場合は、ほとんどの場合、サーバー側のコードで設定できます (存在する場合)。

于 2013-10-24T22:41:26.167 に答える
0

キャッチオール NETWORK ホワイトリストをコメントアウトすることをお勧めします。

NETWORK:
# *

* によると、すべてのファイルにネットワーク アクセスが必要なようです。

https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache

私の単純な Web アプリケーションのすべての NETWORK エントリを今のところコメントアウトしましたが、うまく機能します。

于 2013-08-31T23:09:06.173 に答える