| 説明 | スクリプトを記述する |
|---|---|
| 語源 | SCRIPT |
| 所属モジュール | Scripting |
| 所属コンテントセット | Block, Inline, InlineFormattable |
| 内容 | PCDATA [必須] |
| 内容の書式 | PCDATA |
| 関連項目 | head, noscript |
| 公式な実装 | DTD |
| 属性 | 属性値の型 | 説明 |
|---|---|---|
| xmlns | URI (CDATA) |
XMLネームスペースを指定します。XHTML 1.1では、常にhttp://www.w3.org/1999/xhtmlです。 |
| id | ID |
この要素を識別する為の識別子を指定します。識別子は同一文書中で重複する事は許されません。 |
| 属性 | 属性値の型 | 説明 |
|---|---|---|
| type [必須] | ContentType (CDATA) |
リンクするリソースのコンテントタイプを指定します。 |
| src | URI (CDATA) |
外部スクリプトのURIを指定します。 |
| charset | Charset (CDATA) |
リンクするリソースの文字エンコーディングを指定します。 |
| defer | [選択] |
このスクリプトの処理を後回しにするかどうか指定します。表示に影響を与えない場合、指定しておくといいでしょう。
|
| xml:space | [選択] |
空白の扱い方を指定します。これを指定しない場合、空白の扱いはユーザーエージェントに依存します。
|
script要素は、スクリプトを実行して自身と置き換えます。ここで言うスクリプト (Script)とは、クライアントマシンで実行される、XHTML文書に対して補助的に使われるプログラムの事です。大体のものは、DOMを実装するスクリプトエンジンによって解釈されるスクリプト言語、例えばJavaScriptやVBScript、ECMAScriptなどで記述されます。これらのスクリプト言語の詳細については、ここでは取り上げません。
スクリプトを利用する事で、動的かつ双方向の対話ができるようになります。例えば、次のような利用法が考えられます。
近年では、特に、既存の内容を書き換えるような作用を働かせる場合、「WWWが可能にするもの(及びそれについての概念)を根底から進歩させるもの」、つまり「従来のようにHTTPリクエストの度にユーザーエージェントが毎回ウィンドウの内容を全て書き換えるのではなく、必要に応じて非同期通信を行い、全書き換えを行わず内容を書き換える作用・機構、及びその概念」に対してAjax という言葉が使われるようですが、このAjaxという用語の定義についてはまだ混乱があるようです(原文はAjax: A New Approach to Web Applications)。
こういった事を可能にするスクリプトは、2種類に大別できます。
この文書ではスクリプトの利用の詳細については扱いません。ここではscript要素の概略だけ説明します。
使用するスクリプト言語をtype属性で示し、スクリプトは内容として記述するものです。
[プログラムコード開始]
[プログラムコード終了]
script要素の内容はPCDATAデータタイプなので、<や&などに対しては文字参照などを使わなければなりません。HTML時代はCDATAデータタイプだったので、気を付けなければなりません。
[プログラムコード開始]
[プログラムコード終了]
あるいは、全体をCDATAセクションにしてしまうという方法もあります。CDATAセクションでは]]>以外はマークアップにならないので、細かい事を気にする必要がありません(と言っても、]]>を含めては駄目なので、これだけは]]>などと参照を使う必要があります)。ちなみに属性値のCDATAデータタイプは参照も使えるので混同しないで下さい。
[プログラムコード開始]
[プログラムコード終了]
ただ、これらの方法だと、スクリプトがある事に気付かない(script要素を認識しない)ユーザーエージェントが内容をそのまま表示してしまう可能性があります。尤も、最近ではそういうユーザーエージェントを使っている人はいないかも知れませんが、特に同じ内容を繰り返す場合は、外部スクリプトを使った方がいいでしょう。
script要素は、内容として記述する代わりに、別のファイルとしてスクリプトを用意しておいて、それにリンクして処理させる事ができます。特に何回も使われるスクリプトの場合は、管理効率の面でも、転送量の面でも好まれるでしょうし、script要素を認識しないようなユーザーエージェントでも内容が描画されてしまう恐れがありません。
外部スクリプトを読み込む場合は、src属性とtype属性を使います。src属性を使った場合、要素の内容は全て無視されます。
[プログラムコード開始]
[プログラムコード終了]
内容が空(PCDATAデータタイプは長さが0でも良い)なので、空要素のように<script src="/script/common.js" type="application/javascript"/>とやっても良さそうに見えます。実際XML 1.0ではそうやっても良く、文法的にも何ら誤りではありませんが、SGMLパーサとの下方互換性(ひいてはHTMLパーサとの下方互換性)を考慮して、内容の書式がEMPTYでない要素では通常の終了タグを書くべきだとされています。実際、IE7ではscript要素の空要素タグを書くとおかしな事になります。
必ずしも全員がスクリプトの恩恵に浴せる訳ではありません。script要素は認識するけれどもスクリプトは実行できないユーザーエージェントや、スクリプトを実行する能力はあるけれども、実行しないように設定されているユーザーエージェントなどを使っている人達です。
スクリプトを実行しない場合の代替コンテントは、noscript要素で記述します。代替コンテントは、object要素の内容やimg要素などのalt属性などのように、できるだけスクリプトによって得られる結果に近いものでなければなりません。
[プログラムコード開始]
[プログラムコード終了]
勿論、スクリプトを実行して得られる結果は一定ではないですから、完全に等価なものでなくても構いません。が、「このページはスクリプトを実行できるブラウザで見て下さい。」といったテキストを代替コンテントとしてはいけません、というより意味がありません。飽くまでスクリプトは、「使える場合はより便利になるが、使えない場合でもXHTMLの記述だけで同様な結果が得られる」ものであるべきです。
noscript要素の内容は、スクリプトを実行できないユーザーエージェントや、実行能力はあるが実行しないように設定されているユーザーエージェント、また、先行するscript要素のtype属性で示されるスクリプト言語を解釈できないユーザーエージェントによって描画されます。実行能力があり、指定されたスクリプト言語を解釈でき、実行しないようにも設定されていないユーザーエージェントは、そのscript要素に続くnoscript要素の内容を描画しません。
解説を参照して下さい。
| [script] | ||
|---|---|---|
| Published | : | 2006-03-26T09:00:00+09:00 |
| Last Modified | : | 2007-02-21T09:00:00+09:00 |
| Table of Contents | : | 要素目次 |
| Index | : | 要素索引 |
| Verified with | : |
|