ブラウザにcss、javascriptなどを更新させる


88

XAMPPを通じてWordpressのソースコードに基づいたウェブサイトを開発しています。CSSコードやスクリプトなどを変更すると、ブラウザが変更を適用するのに時間がかかることがあります。これにより、複数のブラウザを使用して1つを更新することになります。新しいスタイルが適用されない場合は、2つ目のブラウザを試してみますが、これは常にこれです。

この問題を回避する方法はありますか?以前の変更に気付かずにコードを変更することがあります。


4
ブラウザはキャッシュします。CSS、JavaScriptに変更を加え、更新したページを表示しているときはいつでも、この懸念が表示されます。ブラウザでCTRL + F5を押すと強制的に更新でき、最新バージョンが取得されます。私は...クロムは時々カップルの時間をそのシーケンスを必要と見つけた
anAgent

プログラムでブラウザのキャッシュをクリアすることもできます
Pawan 2012


ここで答える:フェルミンの答え
JWC 2017年5

回答:


111

一般的な解決策

Ctrl+ F5(またはCtrl+ Shift+ R)を押して、キャッシュを強制的に再ロードします。私はMacが使用信じますCmd+ Shift+ R

PHP

PHPでは、有効期限をヘッダー付きの過去の時刻に設定することで、キャッシュを無効にできます。

header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

クロム

Chromeのキャッシュを無効にするには、で開発ツールを開き、F12右下隅にある歯車のアイコンをクリックして、次のように設定ダイアログで[キャッシュを無効にする]を選択します。

ここに画像の説明を入力してください
この回答から取られた画像。

Firefox

about:configURLバーに入力し、「network.http.use-cache。」というタイトルのエントリを見つけます。これをに設定しfalseます。


詳細な説明をありがとうJamWaffles、そして返信をありがとう。どうもありがとうございました。
user1511579 2012

Chromeの最近のバージョン:CTRL + R。
Alix Axel 2013年

1
Chromeの場合、共有したインターフェースが少し変更されました。[ネットワーク]タブを押すだけで、チェックボックスが表示されます。
Baz Guvenkaya 2017年

5
参考:Mac上のOperaの場合はcmd-alt-R
Derwent 2017年

52

クライアント側でそれを避けたい?v=1.x場合は、ファイルの内容が変更されたときに、cssファイルリンクのようなものを追加できます。たとえば、これに<link rel="stylesheet" type="text/css" href="css-file-name.css">変更できる場合は、<link rel="stylesheet" type="text/css" href="css-file-name.css?v=1.1">キャッシュをバイパスします。


1
良い点ですが、ブラウザは常にファイルについて質問します。もちろん、サーバーは「304NotModified」を返します。
Andrzej Jozwik 2013年

@ajozwik Firefox26.0とChromium31.0.1650.57でテストしました。あなたが言ったように、CSS URLに疑問符が含まれている場合(そしてサーバーが空の本文で応答304を返す場合)、Firefoxは実際に毎回新しいクエリを作成します。CSS URLに疑問符が含まれていない場合、Firefoxは新しいクエリを作成しません。Chromiumは、疑問符があっても新しいクエリを作成しません。おそらくこれはFirefoxのバグと見なすことができます。
Jaan 2014年

私の友達はこのようには機能しません。ファイル名が異なる場合のみ。なぜそんなに多くの賛成票がありますか?
ゲディミナス

私は他の多くの場所でこの回答と同じアプローチを見つけました。これは過去に機能したと思いますが、現在は機能していません。開発モードの場合、最善かつ普遍的なアプローチは、HTMLメタタグを介してブラウザでのキャッシュを無効にすることです。以下の私の答えを参照してください。
ePi272314 2018年

9

あなたがphpを書くことができるなら、あなたは書くことができます:

<script src="foo.js<?php echo '?'.mt_rand(); ?>" ></script>
<link rel="stylesheet" type="text/css" href="foo.css<?php echo '?'.mt_rand(); ?>" />
<img src="foo.png<?php echo '?'.mt_rand(); ?>" />

いつもリフレッシュします!

編集:もちろん、これをすべてに手動で追加することはないので、Webサイト全体にとって実際には実用的ではありません。


このようには機能しません!ファイル名が異なる場合のみ、ブラウザがリロードされます。または、このヒントが機能する場合は、一部のブラウザでのみ機能する可能性があります
Gediminas


5

開発者の視点
(元の質問のように)開発モードの場合、最善のアプローチは、HTMLメタタグを介してブラウザーでのキャッシュを無効にすることです。このアプローチをユニバーサルにするには、以下に示すように、少なくとも3つのメタタグを挿入する必要があります。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

このように、開発者はページを更新するだけで変更を確認できます。しかし、本番環境ではそのコードにコメントすることを忘れないでください。結局のところ、キャッシュはクライアントにとって良いことです。

本番モード
本番環境ではキャッシュを許可し、クライアントはフルリロードやその他のトリックを強制する方法を知る必要がないため、ブラウザが新しいファイルをロードすることを保証する必要があります。はい、この場合、私が知っている最善のアプローチは、ファイルの名前を変更することです。


2
<script src="foo.js?<?php echo date('YmdHis',filemtime('foo.js'));?>"></script>

変更すると更新されます。


Webpackや、リソースにバージョン管理を自動的に追加するパッキングツールを使用していないすべてのプロジェクトに最適なソリューションです。
Richiゴンサレス

私はそれをdownvoteませんでしたが、このソリューションは、今日の最新クロームでうまく動作しない、それはまだJavaScriptファイルの以前のバージョンを取り出す
ミカエル・メイヤー

1

これがDNSから発生していないことを確認してください。たとえば、Cloudflareには開発モードをオンにできる機能があり、Cloudflareは高速キャッシュを提供するため、スタイルシートと画像を強制的にパージします。これにより、無効になり、誰かがサイトにアクセスするたびに強制的に更新されます。



0

FirefoxのWeb開発者ツールバーを使用してキャッシュをオフにすることができます。



0

上記の受け入れられた答えは正しいです。ただし、キャッシュを定期的にリロードするだけで、Firefoxを使用している場合は、Web開発ツール(2015年11月現在の[ツール]メニュー項目の下)にネットワークオプションがあります。これには、リロードボタンが含まれます。キャッシュを一度オフにリセットするには、[リロード]を選択します。


0

これらのファイルがすべてのユーザーに対してChromeによって適切に更新されることを確認したい場合must-revalidateは、Cache-Controlヘッダーに含める。これにより、Chromeはファイルを再チェックして、ファイルを再フェッチする必要があるかどうかを確認します。

次の応答ヘッダーを推奨します。

Cache-Control: must-validate

これにより、Chromeはサーバーに確認し、新しいファイルがあるかどうかを確認するように指示されます。新しいファイルがある場合は、応答でそれを受け取ります。そうでない場合は、304応答を受け取り、キャッシュ内の応答が最新であることが保証されます。

このヘッダーを設定しない場合、ファイルを無効にする他の設定がない場合、Chromeはサーバーに新しいバージョンがあるかどうかを確認しません

これは、この問題についてさらに説明しているブログ投稿です。


0

html-headの外部cssファイルへのリンクタグの代わりに、php-includeを使用します。

<style>
<?php
include("style.css");
?>      
</style>

一種のハックですが、私にとってはうまくいきます:)


1
OPがphpを使用しない可能性があると思いましたか?
オラム2018

0

ブラウザは新しいバージョンのcssファイルとjsファイルをチェックしないため、変更を加えるたびにcssディレクトリとjsディレクトリの名前を変更することにしました。ディレクトリ名はcss1〜css9、js1〜js9を使用しています。9になったら、次に1からやり直します。苦痛ですが、毎回完璧に機能します。ユーザーにタイプするように言わなければならないのはばかげています。


0

何千ものクライアントに影響を与えるスタイルシートをリモートで作成および変更できる必要がある場合がありますが、ネットワーク負荷が高くなるリスクがあるため、キャッシュをオフにしません。

HTMLの内容をリモートで変更できるので、スタイルシートをスタイルシートの内容と一致するハッシュコードにリンクします。

https://example.com/contents/stylesheetctrl?id=12345&hash=-1456405808

そうは言っても、HTMLコンテンツが変更されたときに、クライアント側のjavascript関数を使用してノードと属性を慎重に置き換えます。つまり、スタイルシートのリンクタグは置き換えられず、href属性のみが変更されます。

このシナリオは、WindowsのChrome、Firefox、Edge、AndroidのChromeでも正常に機能しますが、驚いたことに、AndroidのWebクライアントでは常に機能するとは限りません。だから私は多かれ少なかれjavascriptを使用して更新を強制/トリガーするものを探しています-最適にはページをリロードする必要はありません。


0

Firefox / Chrome開発者ツールバーを使用できます。

  1. オープンDevのツールバーCtrl+ Shift+I
  2. ネットワークタブに移動します
  3. [キャッシュを無効にする]チェックボックスを押します(Firefox:ツールバーの右上、Chrome:ツールバーの上部中央)

-1

これを試して:

link href="styles/style.css?=time()" rel="stylesheet" type="text/css"

'?'の後に何かが必要な場合 これは、ページにアクセスするたびに異なり、それtime()を実行します。これをコードに永続的に残すことは、ページの読み込みを遅くするだけで、おそらく必要ないため、実際には良い考えではありません。

ページのレイアウトに大幅な変更を加えた場合、スタイルシートを強制的に更新すると便利であり、新しいスタイルシートにアクセスすることは、画面に何か意味のあるものを表示するために不可欠であることがわかりました。


1
このようには機能しません!ファイル名が異なる場合のみ、ブラウザがリロードされます。または、このヒントを使用すると、一部のブラウザでのみ機能します。反対票
ゲディミナス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.