ページ表示時、読み込み時に JavaScriptを実行するコードと実行結果

ページ読み込み時に JavaScriptを実行するコードと実行結果を紹介します。

概要

ページ読み込み時にJavaScriptを実行するには、大きく分けると以下の2つの方法があります。
  • JavaScriptのイベントに設定する方法
  • JavaScriptを記述するscriptタグ内に関数化せずにJavaScriptのコードを記述する方法

scriptタグ内に関数化せずにJavaScriptのコードを記述する方法は、ページのDOM構築前に実行されるため、DOM要素が取得できないなどのタイミングの問題があるため、 この記事では、イベントを利用する方法とコードを紹介します。直接記述した場合の動作の詳細はページ末尾の補足のセクションを参照してください。
ページ読み込み時に発生するイベントを設定する方法として、以下の方法があります。
  • bodyタグのonloadに記述する方法
  • windowオブジェクトのonloadイベント(window.onload)を設定する方法
  • window.addEventListener メソッドを利用する方法

この記事では3つの方法それぞれのコードを紹介します。

方法1: bodyタグのonloadに記述する方法

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    function proc() {
      elem = document.getElementById("output");
      elem.innerText = "JavaScriptが実行されました。";
    }
  </script>
</head>
<body onload="proc();">
  <div id="output"></div>
</body>
</html>

解説

bodyタグのonload属性に proc() を記述することで、ページ表示時にproc()関数を呼び出す動作となります。proc() 関数内でメッセージをid="output"のタグ内に表示しています。

方法2: JavaScriptでwindow.onload イベントにイベントハンドラを割り当てる

記述方法 a: 関数をイベントに設定する

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = onLoad;

    function onLoad() {
      target = document.getElementById("output");
      target.innerHTML = "JavaScriptが実行されました。";
    }
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

解説

関数化されていないため、ページ読み込み時に下記のコードが実行されます。windowオブジェクトのonloadイベントにonLoad関数を設定しています。
 window.onload = onLoad;

ページ読み込み後に、onLoad関数が実行されメッセージが画面に表示されます。
function onLoad() {
  target = document.getElementById("output");
  target.innerHTML = "JavaScriptが実行されました。";
}

記述方法 b: onloadイベントに直接関数を記述する

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function onLoad() {
      target = document.getElementById("output");
      target.innerHTML = "JavaScriptが実行されました。";
    }
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

解説

先のwindow.onload にイベントを設定する方式と動作は同じです。違いは、先のコードでは関数を別途定義し、onloadイベントに設定していますが、このコードでは、onloadイベントに設定する部分でonLoad関数も定義しています。

記述方法 c: 無名関数を利用する方法

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function () {
      target = document.getElementById("output");
      target.innerHTML = "JavaScriptが実行されました。";
    }
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

解説

先のwindow.onload にイベントを設定する方式と動作は同じです。先の例では関数を別途定義し、onloadイベントに設定していますが、このコードでは、onloadイベントに設定する部分で関数を定義しています。関数は無名関数になっており関数名は設定されていません。

方法3: window.addEventListener メソッドを利用する方法

記述方法 a: 関数をaddEventListenerメソッドに与える方法

windows.addEventListener() メソッドを利用してload イベントに関数を登録するとページ読み込み時にJavaScriptを実行できます。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.addEventListener("load", execFunction);
    
    function execFunction() {
      target = document.getElementById("output");
      target.innerHTML = "JavaScriptが実行されました。";
    }
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

解説

window.addEventListener("load", execFunction) の呼び出しでloadイベントにaddEventListenerの第二引数の関数(上記コードではexecFunction()関数)を割り当てます。
ページが読み込まれると、loadイベントに設定した関数(execFunction)が実行されます。

記述方法 b: 無名関数を利用してaddEventListenerを呼び出す方法

先ほどのwindow.addEventListener メソッドを利用するコードと同じ処理ですが、第二引数が関数名ではなく、匿名関数を与えています。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.addEventListener("load", function () {
      target = document.getElementById("output");
      target.innerHTML = "JavaScriptが実行されました。";
    });
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

解説

window.addEventListener("load", /* 中略 */) の呼び出しでloadイベントにaddEventListenerの第二引数の関数を割り当てます。
上記のコードでは匿名関数が第二引数に与えられているため、ページが読み込まれると、引数に与えた匿名関数のコードが実行されます。

実行結果

上記の4つとも、HTMLファイルを表示すると、下図の画面が表示され、同じ実行結果となります。
ページ表示時、読み込み時に JavaScriptを実行するコードと実行結果:画像1

補足: Scriptタグ内に関数化せずにJavaScriptのコードを記述した場合の動作について

下記のコードのように、scriptタグ内で関数化せずに、JavaScriptのコードを記述し、 さらにwindowオブジェクトのonloadイベントを用いずに記述した場合、scriptタグ内はページ読み込み時に実行されます。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript">
    target = document.getElementById("output");
    target.innerHTML = "JavaScriptが実行されました。";
  </script>
</head>
<body>
  <div id="output"></div>
</body>
</html>

しかし、javascript実行時には、ページ全体の読み込みが終わってることが保証されていないため、下記のコード部分で id="output"のタグが見つからない可能性があります。
  target = document.getElementById("output");

この場合、target=nullとなるため、次行のでnullオブジェクトに対する操作エラーとなります。正しく実行させるためには、先の例のようにwindowオブジェクトのonloadイベントに設定する必要があります。
エラーが発生する行
  target.innerHTML = "JavaScriptが実行されました。";

または、下記のコードのように、outputタグより後ろにjavascriptのコードを設置し、javascript実行時には、id="output"のタグが読み込まれている状態にする必要があります。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
	<meta charset="utf-8" />
</head>
<body>
  <div id="output"></div>

  <script type="text/javascript">
    target = document.getElementById("output");
    target.innerHTML = "JavaScriptが実行されました。";
  </script>

</body>
</html>

A.W.S (Another World Story)

ページ表示時、読み込み時に JavaScriptを実行するコードと実行結果:画像2
昼下がりの情報処理教室。
磨き込まれた床に春の陽が反射し、窓際の机まで淡くゆれていた。 チャイムから十分ほど経った休み時間、二年生のユイはノート PC を広げ、まだ蒸気の立つ紙コップのココアをそっと置いた。 キーボードをたたく指先には微かなチョコレートの香り。隣ではケンが椅子を半回転させ、スケッチブックの端でリズムを取りながら覗き込んでいる。

「ページを開いた瞬間に背景色を変えてみたいんだよね」
ユイが囁くように言って、コードを一行ずつ読み上げた。

window.addEventListener('load', ()=>{ document.body.style.backgroundColor='lemonchiffon'; });

ケンが目を細める。 「onload じゃなくて addEventListener にしたんだ。DOM が全部そろうまで待てるし、複数登録できるし」

「昨日の記事で見たの」
ユイは口角を上げた。
「それと比較のために読み込み途中で動くやつも試したい」
そう言って、もう一つテキストエディタに貼り付ける。

document.addEventListener('DOMContentLoaded', ()=>{ console.log('DOM Ready'); });

Enter キーを押した瞬間、PC のファンが小さく唸り、ブラウザーが開く。
真っ白なページがぱっとレモンシフォンに染まり、開発者ツールには DOM Ready の文字列が並んだ。

「おお、ちゃんと二段構えで動くじゃん」
ケンが感嘆の声を上げると、背後の窓をかすめる風がカーテンをふわりと持ち上げた。遠くのグラウンドから歓声が聞こえ、春の匂いが漂い込む。

ユイは満足げに頷きながらも、すぐに眉をしかめる。
「でもさ、ユーザーに気付いてもらうには色が地味かな」

ケンはスケッチブックにさらさらとペンを走らせた。
「じゃあページ読み込み時にランダムで色を替える関数を書いてみる?」
ページに虹がかかるイメージを描いて見せるケン。ユイは笑いながら、画面に新しい行を挿入する。

const colors=['peachpuff','lavender','mintcream'];
colors[Math.floor(Math.random()*colors.length)]

プレビューを更新した途端、背景は薄い桃色へ。二人は顔を見合わせて「おいしそう」と同時に呟き、弾けるように笑った。

そのとき、後ろの席のリナが振り向き、スマホを掲げた。「ねえ、それ私の宿題ページにも仕込んでいい?」
「もちろん」とユイが即答する。

数分後。リナのスマホには淡いミントグリーンのレポートページ。だが提出用ポータルにアップした瞬間、背景色が濃い紫に変わり、教師用モニターにもその色が反映された。 教壇の端から「あれっ、表示バグか?」という声。生徒たちがざわめくなか、リナは青ざめ、ユイとケンは顔を見合わせる。

「ランダムカラーにこんな濃い色、入れてた?」
「入れてない…けど ‘rebeccapurple’ は可愛いと思って」

騒ぎを聞きつけた教務主任が駆け寄る。
「誰だ、提出画面をハロウィーン仕様にしたのは!」

教室が静まり返る。ユイがそっと手を挙げかけた瞬間、主任の後ろでプロジェクターのスクリーンがパステルイエローに切り替わり、 続けて淡い空色、ローズピンク――まるで万華鏡のように変わり続けた。リナが追加のロジックを実装したに違いない。

ざわっ――

主任が振り向き、映る文字を読む。
console.log('DOM Ready');

ケンが小声で呟く。「先生、JavaScript の実行結果もご覧のとおりで…」

次の瞬間、主任の肩が震えた。
「お前たち、せっかくなら学校説明会の日にやれ。保護者受けする色を用意しておけよ」
唖然とする三人を尻目に、主任は笑顔で立ち去る。背中越しに「リリースは慎重に!」とひとこと残して。

ユイは深く息を吐き、ココアを一口。
「まさかの OK?」
ケンは椅子を回し、ハイタッチを掲げる。
「仕様変更、仕様確定!」

リナも苦笑いで手を重ねた。窓の外では、午後のチャイムが鳴り始めている。 背景色はまた淡いレモンシフォンに落ち着き、教室に柔らかな光が戻った。
このページのキーワード
  • ページ表示時、読み込み時に JSを実行するコードと実行結果
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2015-10-08
Copyright © 1995–2025 iPentec all rights reserverd.