【JavaScript】ページをリロードする方法

JavaScriptでページをリロード(再読み込み)するには location.reload() を使います。基本はこれだけですが、「キャッシュを無視して最新にしたい」「自動でリロードしたい」といった場面で誤解しやすいポイントがあります。

この記事では、正しいリロード方法と、JavaScriptではできないこと(キャッシュ無視リロード)を正直に解説します。

この記事の結論:通常のリロードは location.reload()、履歴を残したくないなら location.replace(location.href) です。location.reload(true) は非標準で現代ブラウザでは無視されlocation.href = location.hrefキャッシュ無視にはなりません。最新データが欲しいだけなら、リロードより fetch での部分更新が効率的です。
スポンサーリンク

標準のリロード(location.reload)

もっとも基本的な方法です。ブラウザの更新ボタンと同じく、ページを再読み込みします(通常どおりキャッシュは利用されます)。

JavaScript:ページをリロード
location.reload();

履歴を残さずリロード(location.replace)

同じURLを location.replace() に渡すと、履歴に新しいエントリを追加せずにリロードできます。

JavaScript:履歴を残さずリロード
location.replace(location.href);

「戻る」で前の状態に戻したくないとき(フォーム再送信を避けたいときなど)に便利です。URLの遷移全般はURLを遷移させる方法でも解説しています。

「キャッシュを無視したリロード」はJSでは確実にできない

よく見かける2つの方法は、いずれもキャッシュ無視にはなりません。まずは誤解を解いておきましょう。

JavaScript:よくある誤解(NG)
// ❌ 引数 true は非標準。現代ブラウザでは無視され reload() と同じ
location.reload(true);

// ❌ これは「通常のリロード」。キャッシュは無視されない
//    さらに URL に #hash があると、同じURLの再代入では何も起きない
location.href = location.href;
正しい理解:Ctrl+Shift+R(スーパーリロード)に相当するキャッシュ完全無視は、JavaScriptからは確実に行えませんlocation.reload(true)true は古いFirefox独自の機能で、現在の標準では引数自体が無視されます。

確実に最新を取得したいなら、目的に応じて次のようにします。

JavaScript:キャッシュ対策の現実的な方法
// ① URLにユニークな値を付けてキャッシュを回避(キャッシュバスティング)
//    ※ URLに ?_=... が付く点に注意
location.href = location.pathname + "?_=" + Date.now();

// ② データだけ最新化したいなら fetch で no-store
fetch("/api/data", { cache: "no-store" });

そもそもキャッシュの効き方はサーバーの Cache-Control ヘッダーで決まります。常に最新を返したいリソースは、サーバー側でキャッシュ制御するのが本筋です。

一定時間後・定期的にリロードする

一定時間後や定期的にリロードしたいときは、setTimeout / setInterval を使います。JavaScriptを使わない meta refresh もあります。

JavaScript:時間でリロード
// 30秒後に1回だけリロード
setTimeout(() => location.reload(), 30000);

// 30秒ごとに繰り返しリロード(clearIntervalで停止できる)
const timer = setInterval(() => location.reload(), 30000);
// clearInterval(timer);
HTML:meta refresh(JS不要)
<!-- 30秒ごとにリロード -->
<meta http-equiv="refresh" content="30">

setInterval の使い方や停止方法はsetIntervalの使い方、ウィンドウ幅の条件でリロードする例はウィンドウサイズの条件でページをリロードする方法を参考にしてください。

リロードより部分更新(fetch)を検討する

「最新データを表示したい」だけなら、フルリロードは重すぎる場合が多いです。ページ全体を読み込み直すとCSSや画像も再取得され、スクロール位置や入力中の値もリセットされます。データだけ更新したいなら fetch で取得し、DOMの一部だけ書き換えましょう。

JavaScript:fetchで部分更新
async function refreshData() {
  const res = await fetch("/api/data", { cache: "no-store" });
  const data = await res.json();
  render(data); // 必要な部分だけDOMを更新
}

ボタンによる更新やカウントダウン付き自動更新、Ajax部分更新まで含めた実装はページ更新ボタンの実装完全ガイドが参考になります。

よくある質問(FAQ)

QJavaScriptでページをリロードするには?
Alocation.reload() が最もシンプルです。履歴に残さずリロードするなら location.replace(location.href) を使います。
Qlocation.reload(true) で強制リロードできますか?
Aいいえ。true(forceGet)は古いFirefox独自の非標準機能で、現在の標準仕様では引数は無視されreload() と同じ動作になります。JavaScriptからキャッシュを完全無視するリロードは確実には行えません。
Q一定時間後に自動リロードするには?
AsetTimeout(() => location.reload(), 30000) で30秒後にリロードします。HTMLの <meta http-equiv="refresh" content="30"> ならJavaScript不要で実現できます。
QAjax通信後にページの一部だけ更新するのとリロードの使い分けは?
AUXと効率の面から部分更新(fetchでDOMを直接変更)が推奨です。フルリロードはCSSや画像の再読み込み・入力値のリセットが起きます。フォーム送信完了後の遷移には location.replace() が適切です。

まとめ

ページのリロードは location.reload() が基本で、履歴を残したくないなら location.replace(location.href) を使います。

注意したいのは、location.reload(true)location.href = location.href もキャッシュ無視にはならない点です。JavaScriptでキャッシュを完全に無視することはできないため、キャッシュバスティングやサーバーの Cache-Control で対応します。最新データの表示が目的なら、フルリロードより fetch での部分更新を検討しましょう。