佐賀大学農学部 応用生物科学科 情報基礎演習 テキスト  科目ホームページ

JavaScript入門

WWWはサーバーとクライアントの通信によって成り立ちます。 これをサーバー?クライアントモデルと言います。 たとえば、サーバーに文書ファイルを用意しておいて、クライアントがサーバーにアクセスして、その文書を表示することができます。

しかし、動的なコンテンツを作ろうとすると、クライアントのちょっとした動作によって、頻繁にサーバー?クライアント間の通信が発生し、 両者の間の実効的な通信速度が遅い場合、実用的なコンテンツではなくなります。 また、多数のユーザーが同時に利用する場合、サーバーにおける負荷が高くなりやすいといった問題もあります。

そこで、ある程度の動的な仕事はクライアント側でさせるようにするためにJavaScript言語が開発されました。 クライアントがJavaScriptを含むページにアクセスすると、最初にJavaScriptのプログラムがクライアント側にダウンロードされます。 そして、他のページをアクセスするまでは、そのJavaScriptプログラムはクライアントのWWWプログラムの中で実行されます。

このように、JavaScriptのような仕組みはクライアント側にプログラムを送り込むためにセキュリティー上で問題となりやすいものです。 そこで、JavaScriptにはさまざまな制限がありますし、クライアントソフト側ではJavaScriptを無効にすることもできます。

簡単な例

それでは簡単な例をメモ帳に入力して、js1.htmlとして保存してください。 ただし、右端の<-以降は入力しないでください。
<HTML lang=ja>
<HEAD>
<TITLE>例1</TITLE>

<script language="JavaScript">                                   <-1
<!-- Begin code                                                  <-2

userName = prompt("名前を入力して下さい",""); //入力を要求する  <-3

if(userName != "") {                                            <-4
  document.write(userName, "さん、ようこそ!"); //画面に出力    <-5
} else {                                                        <-6
  document.write("名無しさん、ようこそ!");      //画面に出力   <-7
}                                                               <-8
// -- End code -->                                              <-9
</script>                                                       <-10

</HEAD>

<BODY>

</BODY>
</HTML>

1行目(<-1)では、ここからJavaScriptのプログラムが始まることを宣言しています。 10行目と対にして使います。

一般にJavaScriptのプログラムはHEAD部の中で記述します。

2行目と9行目はJavaScriptが使えないクライアントのためのおまじないで、これも対で使います。

3行目のpromptはJavaScriptの組み込み関数で、表示されたフォームに入力された文字列がOKボタンが押されるとuserNameという変数に入れられます。

4行目でuserNameが空かどうかをチェックして、空でなければ5行目で画面表示します。 userNameが空であれば7行目で「名無しさん、ようこそ!」を画面表示します。

if()は()の中の条件をチェックしてOKなら次の{}の中を実行し、条件にマッチしなければelse以降の{}の中を実行します。

!= ""は空の文字列ではないという条件を表します(!は否定)。

document.write()はページに文字列を表示する関数です。

先ほど保存したjs1.htmlをダブルクリックすると下のようなフォームが表示されますので、 期待通りの動作をするか、試してみてください。

スライドショー

下の例はQPONさんのJavaScript入門にあった、JavaScriptによるスライドショーです。

小さな画像の上にマウスを置くと、大きな画像が変わります。

マウスを乗せてください。
<html> <head> <script language="javascript"> // ヘッダー内でのJavaScript定義 <!-- hana_url="http://genome.ag.saga-u.ac.jp/textbook/img/"; // 画像ファイルのあるURLを変数に格納 hana_file=new Array("011.jpg","012.jpg","013.jpg","014.jpg","015.jpg","016.jpg"); // 画像ファイル名を配列に格納 function chg(rr){ // 関数chg()の定義 document.hana.src=hana_url+hana_file[rr]; // 指定された番号の画像ファイルのURLを画像hanaのsrcに設定する } //--> </script> </head> <body> <center> <b>スライドショー</b> <table border=1 bgcolor=#eeeeee><tr><td> <img src="http://genome.ag.saga-u.ac.jp/textbook/img/011.jpg" name="hana" width=240 height=280 border=0> // ここで初期画像ファイルを表示させます。画像の名前をhanaにしています。 </td></tr></table> <script language="javascript"> // サムネイル用の縮小画像表示のためのJavaScript <!-- document.write('<table border=1><tr>');      for(i=0;i<6;i++){ // 6回繰り返します。 document.write('<td><a href="JavaScript:void(0)" onMouseover="chg(',i,')">'); // 表のこの項目のところにマウスが来たらchg(i)を実行する document.write('<img src="'+hana_url+hana_file[i]+'" width=35 border=0></a></td>'); // サムネイル用の縮小画像の表示 } // ここまで繰り返す document.write('</tr></table>'); //--> </script> マウスを乗せてください。<br> </center> </body> </html>

シャドーイン

ページにアクセスすると、だんだん文字が見えてくるようにするJavaScriptがあります。

次のHTML+JavaScriptをメモ帳で入力し、js2.htmlに保存して、クリックしてみてください。

(この例題は総合情報基盤センターのWWWクライアントでは異図した動作をいたしません)

<html> <head> <title>例2</title> <script langage="javascript"> <!-- hx = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"); function disp(){ for(i=0;i<16;i++){ for(j=1;j<16;j=j+2){ col="#"+hx[i]+hx[j]+hx[i]+hx[j]+hx[i]+hx[j]; document.bgColor=col; document.forms[0].hex.value=col; } } } //--> </script> </head> <body onLoad="disp();"> <form> <input type="hidden" value="#000000" name="hex" size=0><br><br> </form> こんにちは! </body> </html>

new Arrayで0からFまでの16進数の文字をひとつずつhxに配列として入力しています。

JavaScriptでは自分で関数を作れます。ここではfunction disp()としてdisp関数を作成しています。

for(i=0;i<16;i++) はiを16まで1ずつ足しながら繰り返すことを意味しています。 for(j=1;j<16;j=j+2) はjを16まで2ずつ足しながら繰り返します。

col="#"+hx[i]+hx[j]+hx[i]+hx[j]+hx[i]+hx[j]; で16進数の色コードを作ってcol変数に代入しています。

<body onLoad="disp();"> はページを表示する時にdisp関数を実行することを示しています。

document.forms[0].hex.value=col;  <form> <input type="hidden" value="#000000" name="hex" size=0><br><br> </form> 上の4行はIEのバグ?に対する対抗策です。

参考ページ

佐賀大学 農学部 応用生物科学科 動物資源開発学分野 和田研究室

ywada@cc.saga-u.ac.jp