0

私のウェブサイトが更新された場合、つまりCSSと一部のコンテンツが更新された後、古い訪問者が私のページに戻ってきたときにCSSが自動更新されない場合は、手動でページを更新する必要があります。さて、訪問者は専門家ではなく、最初にページが壊れているか、汚れていると思います。

JavascriptまたはPHPを使用してスクリプトを作成する方法、任意...誰かがページ/ウェブサイトにアクセスしているときに、訪問者に開かれる前にページを更新したい。インデックスページでのみ機能する場合は問題ありません。

出来ますか?

私はグーグルの助けを借りてこのスクリプトを見つけました、しかしそれは機能していません、何も起こりません!

<script type='text/javascript'>

(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem( 'firstLoad' ) )
    {
      localStorage[ 'firstLoad' ] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem( 'firstLoad' );
  }
})();

</script>
4

2 に答える 2

2

あなたの最善の策は、CSS URL を「バージョン」することです。

<link type="text/css" rel="stylesheet" href="my_style_sheet.css" />

になる

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=2.1" />

スタイルシートを更新するときはいつでも、URL を変更するだけです。この質問に PHP のタグを付けたので、バージョンを変数または定数として普遍的なincludeed ファイルに保存するだけで、非常に簡単になります。

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=<?=CSS_VERSION;?>" />

JavaScript で行う必要がある場合は、JavaScript で一意のタグ (タイムスタンプなど) を持つ新しいスタイルシートをタグに読み込むことができますがhead、これは帯域幅を浪費し、ページの読み込みを遅くします。最終的に 2 つのスタイルシートをダウンロードします。

var css_file=document.createElement("link");
css_file.setAttribute("rel", "stylesheet");
css_file.setAttribute("type", "text/css");
css_file.setAttribute("href", 'link_to_css.php?random_string='+escape(Math.random()));
document.getElementsByTagName("head")[0].appendChild(css_file);

また、CSS ヘッダーに短いキャッシュ有効期限を設定することもできます ( .phpcss ヘッダーを送信し、expires ヘッダーを追加する css ファイルを作成します。

<?php header("Expires: [DATE IN PAST OR NEAR FUTURE]"); ?>

または、Web サーバーの構成 (Apache など) で、ファイルの種類に基づいてデフォルトのキャッシュ ヘッダーを設定できるため、CSS の有効期限が短いように設定できます。ただし、ここでも、ユーザーのブラウザー キャッシュの利点の一部が損なわれるため、アプリケーションのパフォーマンスがわずかに低下します。

于 2013-01-25T21:38:18.850 に答える
0

ああ、必要なのは「キャッシュバスティング」と呼ばれるものです。Ben D によって説明された手法は優れていますが、少し実践的すぎます。代わりにこれを試してください:

<link type="text/css" rel="stylesheet"
    href="my_style_sheet.css?<?=filemtime('my_style_sheet.css')?>" />

他にも考慮すべき点がいくつかありますが、これは最も基本的な自動キャッシュ無効化手法です。

これにより、ファイルが変更されるたびにファイルへのリンクも変更されるため、キャッシュのタイムアウトを「1年」などの長い値に設定できることに注意してください。

于 2013-01-25T21:50:46.527 に答える