HTMLでページを自動更新するには、<head>内に<meta http-equiv="refresh" content="30">を追加します。数字は秒数で、この例では30秒ごとにページが再読み込みされます。ページの一部だけを更新したいなど細かく制御したい場合はJavaScriptを使います。自分で編集できないページは、自動更新の拡張機能で更新できます。
<head>にmeta refreshタグを1行入れるだけで、JavaScriptは要りません。
<head>
<meta http-equiv="refresh" content="30">
<title>ライブスコア</title>
</head>
MDNのmeta http-equivの解説によると、タイマーはページが完全に読み込まれた時点で始まります。タグはページの一部なので再読み込みのたびに読み込まれ、ページを閉じるまで更新が続きます。contentには更新したい間隔を秒数で指定します。
| 更新間隔 | タグ |
|---|---|
| 5秒ごと | <meta http-equiv="refresh" content="5"> |
| 30秒ごと | <meta http-equiv="refresh" content="30"> |
| 1分ごと | <meta http-equiv="refresh" content="60"> |
| 5分ごと | <meta http-equiv="refresh" content="300"> |
| 1時間ごと | <meta http-equiv="refresh" content="3600"> |
秒数の後ろに;url=と移動先のアドレスを付けます。次のタグは5秒後に新しいページへ移動します。
<meta http-equiv="refresh" content="5;url=https://example.com/new-page">
Google 検索セントラルによると、「Google 検索では、即時の meta refresh リダイレクトは永続的なリダイレクトとして解釈されます」(content="0;url=…")。数秒待ってから移動する遅延型は、一時的なリダイレクトとして扱われます。ページを恒久的に移転したなら、まずはサーバー側の301リダイレクトを使い、サーバーを変更できない場合にmeta refreshを使いましょう。
条件によって更新したいときはJavaScriptを使います。次のコードは30秒ごとに再読み込みしますが、タブが表示されているときだけ実行するので、裏で開いたままのページが読み込みを繰り返すことはありません。
<script>
const timer = setInterval(() => {
if (document.visibilityState === 'visible') location.reload();
}, 30000); // ミリ秒
</script>
JavaScriptの時間はミリ秒なので、30秒は30000です。入力が始まったときなどに更新を止めるにはclearInterval(timer)を呼びます。このコードはページ自身に組み込む必要があります。ブラウザーのコンソールに貼り付けると最初の再読み込みで止まってしまいます。理由とコンソール用のコードは拡張機能なしでChromeのページを自動更新する方法で解説しています。
ページ全体を再読み込みすると、一瞬画面が白くなり(ちらつき)、スクロール位置も先頭に戻ります。これを避けるには、変わる部分だけを取得して書き換えます。「内容が変わったらページを自動更新するには?」(英語)という質問に対する定番の方法です。
<div id="scores">読み込み中…</div>
<script>
async function update() {
const res = await fetch('/scores.html', { cache: 'no-store' });
document.getElementById('scores').innerHTML = await res.text();
}
update();
setInterval(update, 30000);
</script>
この方法で読み込むHTMLは、自分のサーバーのものだけにしてください。ライブカメラの静止画など画像だけを更新したい場合は、アドレスに毎回変わる数字を付けて、ブラウザーがキャッシュを使わないようにします。
setInterval(() => {
const img = document.getElementById('cam');
img.src = img.src.split('?')[0] + '?t=' + Date.now();
}, 10000);
この目的ならmeta refreshは使いません。Ritwick Dey氏による無料のVS Code拡張機能「Live Server」を入れます。Marketplaceの説明によると、ライブリロード機能付きのローカル開発サーバーです。ステータスバーのGo Liveをクリックするか、HTMLファイルを右クリックしてOpen with Live Serverを選ぶと、保存するたびにブラウザーが再読み込みされます。
間隔が短いと問題になります。MDNは、更新間隔が短すぎると、スクリーンリーダーなどの支援技術を使う人がページを読み終える前に再読み込みやリダイレクトが起きてしまうと注意しています。入力中のフォームが消えることもあります。「なぜ勝手に更新されるWebサイトがあるのか」(英語)と疑問に思われるのもこのためです。次の点を守りましょう。
meta refreshタグを追加できるのは自分が管理するページだけです。どんなWebサイトでも一定間隔で更新したい場合は、Chrome・Edge・Firefox向けの無料拡張機能Auto Refresh Pageを使います。Chrome ウェブストアから追加し、ページを開いてアイコンをクリックし、5秒などのプリセットを選んで保存をクリックします。間隔は最短1秒、最長24時間です。
詳しい手順はChromeで自動更新を使用する方法やChrome・Firefox・EdgeでWebページを自動更新する方法をご覧ください。他人のページに特定の言葉が表示されたら知りたい場合は、キーワード検出機能(プレミアム)が使えます。
HTMLでページを自動更新するなら、<head>にmeta refreshタグを1行入れるだけです。細かい制御やちらつきのない更新にはJavaScriptを使いましょう。自分のものではないページを更新したい場合は、Auto Refresh Pageの機能一覧をご覧ください。
ページのhead内に、http-equiv="refresh"とcontent="5"を指定したmetaタグを追加します。数字は秒数なので、content="60"なら1分ごと、content="300"なら5分ごとに再読み込みされます。タグは再読み込みのたびに読み込まれるため、ページを閉じるまで更新が続きます。
metaタグのcontentに秒数と移動先を「5;url=https://example.com/new-page」の形で指定します。Googleは0秒の即時meta refreshを永続的なリダイレクト、数秒待つ遅延型を一時的なリダイレクトとして扱います。恒久的な移転なら、サーバー側の301リダイレクトがおすすめです。
ページにlocation.reload()を一定時間ごとに呼ぶスクリプトを入れます。たとえばsetIntervalに30000(ミリ秒)を指定すると30秒ごとです。document.visibilityStateでタブが表示されているときだけ更新し、止めたいときはclearIntervalを呼びます。コンソールに貼り付けた場合は1回の再読み込みで止まります。
ページ全体を再読み込みせず、fetch()で変わる部分だけを一定間隔で取得して書き換えます。ほかの部分はそのまま残り、スクロール位置も変わりません。画像だけを更新したい場合は、画像のアドレスに現在時刻などの毎回変わる数字を付けると、キャッシュではなく新しい画像が読み込まれます。
更新間隔が短いと悪影響があります。MDNは、スクリーンリーダーの利用者がページを読み終える前に再読み込みされるおそれがあると注意しており、入力中のフォームが消えることもあります。リダイレクトでは、Googleは即時のmeta refreshを永続的、遅延型を一時的と解釈します。間隔は長めにしましょう。
meta refreshタグは自分が管理するページにしか使えません。ほかのWebサイトは、Chrome・Edge・Firefox向けの拡張機能Auto Refresh Pageで更新できます。ページを開いてアイコンをクリックし、5秒や5分などの間隔を選んで保存をクリックします。