| | 91 | <script type="text/javascript" language="JavaScript"><!-- |
| | 92 | function putHoge() { |
| | 93 | var span = document.createElement("span"); |
| | 94 | with (span.style) { |
| | 95 | position = "absolute"; |
| | 96 | left = (Math.floor(Math.random() * |
| | 97 | (window.innerWidth ? window.innerWidth : |
| | 98 | document.documentElement.clientWidth ? document.documentElement.clientWidth : |
| | 99 | document.body.clientWidth))) + "px"; |
| | 100 | top = (Math.floor(Math.random() * |
| | 101 | (window.innerHeight ? window.innerHeight : |
| | 102 | document.documentElement.clientHeight ? document.documentElement.clientHeight : |
| | 103 | document.body.clientHeight))) + "px"; |
| | 104 | } |
| | 105 | span.appendChild(document.createTextNode("hoge")); |
| | 106 | document.getElementById("hoge_place").appendChild(span); |
| | 107 | }; |
| | 108 | //--></script> |
| | 109 | </head> |
| | 110 | |
| | 111 | <body> |
| | 112 | |
| | 113 | <form> |
| | 114 | <input type="button" value="hoge" onclick="putHoge();"> |
| | 115 | </form> |
| | 116 | |
| | 117 | <div style="position: absolute; left: 0; top: 0;" id="hoge_place"></div> |
| | 118 | |
| | 119 | </body> |
| | 120 | |
| | 121 | </html> |
| | 122 | }}} |
| | 123 | |
| | 124 | さて、先ほどのプログラムと比べると、今回のプログラムはかなり複雑です。今はプログラムの内容は気にせず、プログラムが記述されている場所と、その雰囲気に注目してください。 |
| | 125 | |
| | 126 | 先ほどと同様、今回も <input> タグには onclick 属性が指定されています。 |
| | 127 | |
| | 128 | {{{ |
| | 129 | <input type="button" value="hoge" onclick="putHoge();"> |
| | 130 | }}} |
| | 131 | |
| | 132 | しかし、そこに書かれているのは、 putHoge という名前の、恐らくは関数呼び出しに見える (後ろに丸かっこが付いているので) もののみが記述されています。 |
| | 133 | |
| | 134 | HTML ファイルの上の方に、なんだか見慣れない記述がありますね。以下の部分です。 |
| | 135 | |
| | 136 | {{{ |
| | 155 | }}} |
| | 156 | |
| | 157 | この、 <script> タグに囲まれた部分も、 !JavaScript プログラムです。そしてこのプログラム、 |
| | 158 | |
| | 159 | {{{ |
| | 160 | function putHoge() { |
| | 161 | }}} |
| | 162 | |
| | 163 | で始まっていることから分かるように、先ほど <input> 要素の onclick 属性で呼び出そうとしていた putHoge() 関数の定義であることが、何となくおわかりいただけるかと思います。 |
| | 164 | |
| | 165 | このように、通常は <script> タグを用いて複雑な処理を行う'''関数'''を記述し、その関数をイベントハンドラから呼び出す、というスタイルで記述されるのが一般的です。 |
| | 166 | |
| | 167 | なお、上記の例では HTML 4.01 で記述している為、<script> タグの内側は HTML のコメントタグ (<!-- ~ -->) で包んでいます。これには以下の 2つの理由があります。 |
| | 168 | |
| | 169 | * <script> タグに対応していない古いブラウザや未知のブラウザでも、画面上に !JavaScript のプログラムを表示してしまわないようにする為。 |
| | 170 | * !JavaScript 中に出現する不等号記号 (<, >) が、 HTML タグと混同されてしまうのを防ぐ為。 |
| | 171 | |
| | 172 | 一方、 XHTML で記述する場合には、 <script> タグの内側に記述するプログラムを HTML のコメントタグで包むことは禁止されています。 XHTML であれば、 <script> タグには必ず対応しているので、画面上に !JavaScript のプログラムを表示してしまう危険性はありませんが、不等号記号が HTML タグだと誤解されるが故の誤動作の危険性は残っています。それを防ぐ為、 XHTML の場合は以下のように、コメントタグの代わりに <![CDATA[ ~ ]]> で囲うようにする必要があります。 |
| | 173 | |
| | 174 | {{{ |
| | 175 | <script type="text/javascript" language="JavaScript"> |
| | 176 | // <![CDATA[ |
| | 177 | function putHoge() { |
| | 178 | // (...省略) |
| | 179 | }; |
| | 180 | // ]]> |
| | 181 | </script> |
| | 182 | }}} |
| | 183 | |
| | 184 | === !JavaScript のみを別ファイルに記述する === |
| | 185 | |
| | 186 | <script> タグを用いれば、 !JavaScript で記述された複雑な処理のプログラムを、 HTML ファイルとは別のファイルに記述して実行させることも可能です。 |
| | 187 | |
| | 188 | その場合、 HTML ファイルは以下のように記述します。 |
| | 189 | |
| | 190 | {{{ |
| | 191 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
| | 192 | <html> |
| | 193 | |
| | 194 | <head> |
| | 195 | <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
| | 196 | <title>hoge</title> |
| | 197 | <script src="hoge.js" type="text/javascript" language="JavaScript"></script> |
| 151 | | //--></script> |
| 152 | | }}} |
| 153 | | |
| 154 | | この、 <script> タグに囲まれた部分も、 !JavaScript プログラムです。そしてこのプログラム、 |
| 155 | | |
| 156 | | {{{ |
| 157 | | function putHoge() { |
| 158 | | }}} |
| 159 | | |
| 160 | | で始まっていることから分かるように、先ほど <input> 要素の onclick 属性で呼び出そうとしていた putHoge() 関数の定義であることが、何となくおわかりいただけるかと思います。 |
| 161 | | |
| 162 | | このように、通常は <script> タグを用いて複雑な処理を行う'''関数'''を記述し、その関数をイベントハンドラから呼び出す、というスタイルで記述されるのが一般的です。 |
| 163 | | |
| 164 | | なお、上記の例では HTML 4.01 で記述している為、<script> タグの内側は HTML のコメントタグ (<!-- ~ -->) で包んでいます。これには以下の 2つの理由があります。 |
| 165 | | |
| 166 | | * <script> タグに対応していない古いブラウザや未知のブラウザでも、画面上に !JavaScript のプログラムを表示してしまわないようにする為。 |
| 167 | | * !JavaScript 中に出現する不等号記号 (<, >) が、 HTML タグと混同されてしまうのを防ぐ為。 |
| 168 | | |
| 169 | | 一方、 XHTML で記述する場合には、 <script> タグの内側に記述するプログラムを HTML のコメントタグで包むことは禁止されています。 XHTML であれば、 <script> タグには必ず対応しているので、画面上に !JavaScript のプログラムを表示してしまう危険性はありませんが、不等号記号が HTML タグだと誤解されるが故の誤動作の危険性は残っています。それを防ぐ為、 XHTML の場合は以下のように、コメントタグの代わりに <![CDATA[ ~ ]]> で囲うようにする必要があります。 |
| 170 | | |
| 171 | | {{{ |
| 172 | | <script type="text/javascript" language="JavaScript"> |
| 173 | | // <![CDATA[ |
| 174 | | function putHoge() { |
| 175 | | // (...省略) |
| 176 | | }; |
| 177 | | // ]]> |
| 178 | | </script> |
| 179 | | }}} |
| 180 | | |
| 181 | | === !JavaScript のみを別ファイルに記述する === |
| 182 | | |
| 183 | | <script> タグを用いれば、 !JavaScript で記述された複雑な処理のプログラムを、 HTML ファイルとは別のファイルに記述して実行させることも可能です。 |
| 184 | | |
| 185 | | その場合、 HTML ファイルは以下のように記述します。 |
| 186 | | |
| 187 | | {{{ |
| 188 | | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
| 189 | | <html> |
| 190 | | |
| 191 | | <head> |
| 192 | | <meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
| 193 | | <title>hoge</title> |
| 194 | | <script src="hoge.js" type="text/javascript" language="JavaScript"></script> |
| 195 | | </head> |
| 196 | | |
| 197 | | <body> |
| 198 | | |
| 199 | | <form> |
| 200 | | <input type="button" value="hoge" onclick="putHoge();"> |
| 201 | | </form> |
| 202 | | |
| 203 | | <div style="position: absolute; left: 0; top: 0;" id="hoge_place"></div> |
| 204 | | |
| 205 | | </body> |
| 206 | | |
| 207 | | </html> |
| 208 | | }}} |
| 209 | | |
| 210 | | そして、 hoge.js ファイルは以下のような内容となります。といっても、前のサンプルで <script> タグの内側に記述していた内容と全く同じです。もちろん、 HTML コメントタグ <!-- ~ --> や CDATA セクション <![CDATA[ ~ ]]> で囲う必要はありません。 |
| 211 | | |
| 212 | | {{{ |
| 213 | | function putHoge() { |
| 214 | | var span = document.createElement("span"); |
| 215 | | with (span.style) { |
| 216 | | position = "absolute"; |
| 217 | | left = (Math.floor(Math.random() * |
| 218 | | (window.innerWidth ? window.innerWidth : |
| 219 | | document.documentElement.clientWidth ? document.documentElement.clientWidth : |
| 220 | | document.body.clientWidth))) + "px"; |
| 221 | | top = (Math.floor(Math.random() * |
| 222 | | (window.innerHeight ? window.innerHeight : |
| 223 | | document.documentElement.clientHeight ? document.documentElement.clientHeight : |
| 224 | | document.body.clientHeight))) + "px"; |
| 225 | | } |
| 226 | | span.appendChild(document.createTextNode("hoge")); |
| 227 | | document.getElementById("hoge_place").appendChild(span); |
| 228 | | }; |