| 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 | | }; |