HTMLドキュメントにマニフェスト(cache.manifest)があると、どのように削除できますか?

StackOverflow https://stackoverflow.com/questions/4542299

  •  13-10-2019
  •  | 
  •  

質問

マニフェストエントリができたら、ALA:

<html manifest="cache.manifest">

そのページ(キャッシュのマスターエントリ)は、後でHTMLタグからマニフェスト属性を削除してマニフェストを更新する場合でも、ユーザーがキャッシュを削除するために何かをするまで(少なくともSafariによって)常にキャッシュされます(少なくともSafariによって)キャッシュされますその中の何か)、マスターエントリを他のすべてとともにリロードすることを強制します。

言い換えれば、あなたが持っている場合:

  • index.html(マニフェストが定義されている)
  • file1.js(マニフェストで参照)
  • file2.js(マニフェストで参照)
  • cache.manifest(2つのJSファイルをリスト)

- index.htmlからマニフェストエントリを削除し、マニフェストを変更する(ブラウザによって期限切れになり、すべてのコンテンツがリロードされます)、このページがまだ完全にキャッシュされているかのように動作するのを止めません。 index.htmlでソースを表示すると、マニフェストがリストされていなくなることはありませんが、ブラウザは引き続きcache.manifestファイルのみを要求します。ファイルのコンテンツが変更されない限り、ファイルに他の変更が表示されません。ユーザー。

それはかなり明白なバグのように思えます、そして、それはiOSとSafariのMacバージョンに存在します。ユーザーの介入を必要とせずにページをリセットしてキャッシュを取り除く方法を見つけた人はいますか?

役に立ちましたか?

解決

私は同じ質問を研究してきましたが、それは次のように見えません。

  1. ページがキャッシュされていることを動的にトリガーします
  2. 動的にページがキャッシュされるのを止めます。

これが私が見つけた最高のリソースです:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how-to-create-offline-webapps-on-the-iphone

特に、最初のリンクからのこの引用:

マニフェストファイルまたはその中で指定されたリソースがダウンロードに失敗した場合、更新全体が失敗します。ブラウザは、このような障害が発生した場合に古いアプリケーションキャッシュを引き続き使用します。

それ以外の場合、キャッシュを降ろすことについてはどこにも言及されていません。

エラーを強制的に強制して、不自然にするように強制できないことを示唆しているようです。ただし、以下に示すように、仕様は、マニフェストファイルのダウンロード中にエラーが発生した場合、キャッシュ全体が削除されることを示唆しています。

Google Chromeでは、ユーザーは次のURLに移動できます。

Chrome:// appcache-internals/

キャッシュを手動で無効にします。もちろん、次にページにアクセスすると、ページにマニフェストプロパティセットがある場合に再編成されます。

仕様を見ると:5.6オフラインWebアプリケーション

キャッシュが削除される状況を示唆しているようです。具体的には、セクション5.6.4.5:

404または410の応答または等価物のためにマニフェストを取得すると、これらのSubsumed:Mark Cache Groupが廃止されます。このキャッシュグループは、キャッシュグループのアプリケーションキャッシュにすでに関連付けられているドキュメントオブジェクトの処理以外の目的のために存在しなくなりました。 Cacheグループに完全性フラグが不完全なアプリケーションキャッシュがある場合、そのアプリケーションキャッシュを破棄します。

それから言う:

これがキャッシュの試みである場合、キャッシュグループを完全に破棄します。

基本的に、キャッシュマニフェストファイルのリクエストが404になった場合、キャッシュ全体を破棄する必要があります。それで、キャッシュマニフェストファイルが要求されたときに、サーバーに404または410を返してもらうことを試みましたか?それはうまくいくはずです。トリックは、マニフェストを削除するページ(おそらくURLパラメーターを使用しますか?)の404 /410のみを返すことです。

他のヒント

可能な解決策の1つ:

  • マニフェストを変更する(したがって、リロード)
  • マスターファイル(index.html)を変更して、存在しないマニフェストを参照するため、404を取得します

ほとんどエレガントではありませんが、うまくいくようです。主な問題は、あなたのサイトに行ったことがあるすべての人が戻ってきてキャッシュをクリアするまで、この404を生成する誤ったマニフェストエントリにこだわっていることです。

より良い方法が必要です...

マニフェストファイルを削除するだけです。モッツィラドキュメントから:

アプリケーションキャッシュも時代遅れになる可能性があります。マニフェストがサーバーから削除された場合、ブラウザはそのマニフェストを使用するすべてのアプリケーションキャッシュを削除し、アプリケーションキャッシュオブジェクトに「廃止された」イベントを送信します。次に、アプリケーションキャッシュのステータスが廃止されるように設定されます。

これは私にとってもChromeで働いていました。

IIS 7を使用している場合の1つの解決策は、キャッシュを有効にして追加した.manifestまたは.appcacheファイルタイプのMIMEタイプを削除することです。キャッシュを再度有効にするときは、いつでもこれを追加できます。これは私が私のものを修正するためにしたことです。

私たちがしていることは、マニフェストのファイルのリストを削除することです。そのため、ファイルはキャッシュされません。

それは私たちのために働きます。

これは古いかもしれませんが、うまくいけば誰かに役立つことを願っています。

IISプロパティのHTTPヘッダーをご覧ください。コンテンツの有効期限の有効化または無効化をご覧ください。 IISがまだキャッシュを行っている可能性があります。

開発目的で (一定の変更)、私たちがしたことは次のとおりです。

  1. -cacheマニフェストファイルを設定します。たとえば、サーバー側の言語の下でPHPを使用するため、開発キャッシュは「cache.manifest.php」と呼ばれ、このようなHTMLタグでこれと同じように指摘されています。

    <html manifest="cache.manifest.php">
    
  2. マニフェストのどこかにコメント(#---)のどこかにある-time依存文字列(またはあなたに合っている他の何か)を置いてください。 )、たとえば、この文字列は毎分マニフェストを変更します。この方法では、訪問が前回とは別の1分である場合、すべてのファイルが再キャッシュされます。

    <?php if($dev) echo date("Y-m-d H:m"); ?>
    

Chromeを使用してこの手順をテストしたばかりで、他の人で機能することを願っていますが、コメントやアドバイスが非常に高く評価されることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top