17

HTML5 applicationCache を使用して、ページの多くの Javascript、CSS、画像などのファイルを保存しています。これらのファイルの 1 つを更新しても、ブラウザーはそのファイルを再読み込みしません。私は次のことを試しました:

  • ページの読み込み時に applicationCache.update() を呼び出す
  • applicationCache の updateready イベントをリッスンし、swapCache() と window.location.reload() を呼び出す
  • マニフェスト ファイル自体にタイムスタンプ コメントを追加して、マニフェストが変更されたことをブラウザに認識させる

確かにこれは難しいことではありません。キャッシュされたファイルを再要求するようにブラウザを説得するにはどうすればよいですか?

4

5 に答える 5

13

新しい (または変更された) ファイルを強制的にダウンロードするには、マニフェスト ファイルを更新する必要があります (バージョン番号のコメントを追加するか、任意の変更を行います)。おそらく起こっていることは、エラーが発生しているということです。最も一般的なのは、正しい MIME タイプ ( text/cache-manifest) でマニフェストを提供していない可能性があることです。サーバーを正しく構成しましたか? これを確認する最も簡単な方法は、Chrome でページを開き、コンソールと [AppCache] の下の [リソース] タブを調べて、エラーがあるかどうかを確認することです (ファイルが正しく提供されていないというメッセージが表示されます。 curl -I コマンド:

curl -I $manifest_file_URL

マニフェスト ファイルがキャッシュされている可能性もあります (すぐに期限切れになるように、expires ヘッダーを設定できます)。また、リロード シーケンスにも注意してください。ページは最初に AppCache から読み込まれ (存在する場合)、次にブラウザーがマニフェスト ファイルが更新されているかどうかを確認します。更新されている場合は、新しいバージョンのキャッシュをダウンロードして配置しますが、ページが自動的に更新されることはなくswapCache()(少なくとも)、もう一度ページを更新する必要があります。

このトピックの詳細については、このプレゼンテーションも参照してください。

于 2011-03-26T10:38:26.530 に答える
7

Google Chrome では、デバッグ中にこれを行う場合、簡単な回避策があります: シークレット ウィンドウを使用します。キャッシュ内の何かを変更した場合は、シークレット ウィンドウを閉じ (複数ある場合はすべて閉じてください)、再度開いてアプリケーションに移動します。これで、変更されたすべてのファイルを含め、クリーンからダウンロードされます。

これは、保存されているすべてのデータを破壊するため、やや核となるオプションですが、たとえば、CSS を整理するプロセスでは問題なく機能します。

Chrome のページ キャッシュを「閲覧データのクリア」でクリアしても、なぜかうまくいかないようです。

于 2012-11-27T11:17:30.837 に答える
2

「キャッシュマニフェストファイル自体を変更する必要があります。これは、1文字を変更するのと同じくらい簡単です」ありがとう!

于 2012-03-07T13:45:50.843 に答える
1

私はしばらくこれに苦労しました。私にとって重要なのは、MIME タイプを取得し、nginx を介してヘッダーをキャッシュすることでした。

/etc/nginx/mime.types:

text/cache-manifest                   manifest appcache;

/etc/nginx/nginx.conf:

      # If the file exists as a static file serve it directly
      if (-f $request_filename) {
        expires -1;
        break;
      }

expires -1 行により、キャッシュ ヘッダーが no-cache に設定されます。

また、Firefox 23 でキャッシュをクリアするには、以下を使用しました。

  • Firefox->Options->Options->Advanced->Network: Offline Web etc->Clear Now

そして、サーバーから何がフェッチされたかを確認するには:

  • Firefox -> Web オプション -> ツール -> ネットワーク タブ
于 2013-09-19T11:34:11.103 に答える
1

マニフェスト ファイルに HTTP ヘッダーを設定します

'Cache-Control' to 'no-store'

.manifest の Content-Type を追加する

'text/cache-manifest'

そうしないと、ブラウザは設定したキャッシュのデフォルトに合わせてマニフェスト自体をキャッシュするため、マニフェストをチェックするリクエストはキャッシュされたコピーを取得します。

その後、マニフェスト ファイル内の文字を変更すると、次のリクエストで新しいマニフェストがフェッチされます。

実行しているサーバーはわかりませんが、S3 バケットからホストされているファイルに対してこれを行ったところ、S3 は通常 24 時間キャッシュされます。

于 2016-08-10T02:19:33.587 に答える