スクリプトの概説クライアント側スクリプトとは、HTML文書と連携するか、または文書に直接組込まれるようなプログラムのことである。このプログラムは、文書がクライアント環境に読み込まれる際に実行されたり、リンクがアクティブになった際などに実行されたりする。HTMLがスクリプトをサポートする方法は、スクリプト言語の種別からは独立である。スクリプトを用いると、著者は、HTML文書を高度に動的にしたり対話的にしたりする方向で拡張できる。スクリプトは、文書内容を動的に変更するために【最初に】読みこむべき文書として評価され得る。スクリプトは、フォームの入力内容を処理するためにフォームに付随し得る。他のフィールドの内容に応じた値を自動的に埋めるような設計もできる。入力されたデータの値が適切な範囲にあるかどうかやフィールド間に相互矛盾がないかなどを検証することも可能である。スクリプトは、文書の読み込み、書き換え、要素のフォーカス受け取り、マウスの移動、等の文書に関するイベントの発生によって起動される。スクリプトは、ボタンなどフォームのコントロールにリンクされ、グラフィカルなユーザインターフェイスを生成し得る。著者がHTML文書に添付できるスクリプトには、2つの種類がある。ユーザエージェントが文書を読み込む際の、ただ1回だけ実行されるスクリプト。SCRIPT要素中のスクリプトは、文書の読み込み時に実行される。NOSCRIPT要素に含めることができる。特定のイベントが発生する度に実行されるようなスクリプト。この種のスクリプトは、多くの要素のの組込みイベント属性で示される。スクリプトマクロについての詳細情報がある。以下の各節では、スクリプトをサポートするユーザエージェントに関係する内容を説明する。[CT]この属性は、外部スクリプトの所在を指定する。[CI]デフォルトのスクリプト言語を上書きし、当該要素内容のスクリプト言語を指定する。スクリプト言語は、「text/javascript」のようにMIMEタイプで指定する。著者は当該属性値を必ず記述しなければならない。この属性のデフォルト値は存在しない。この属性は、当該要素内容のスクリプト言語を指定する。この値は言語の識別子ではあるが、識別子が【インターネットの】標準ではないので、この属性は推奨しないこととなり、typeを採用する。[CI]この論理型属性を設定した場合、ユーザエージェントに対し、当該スクリプトが文書の本文を少しも生成しないことが示唆される。JavaScriptでいう「document.write」が含まれない、など。従ってユーザエージェントは、【スクリプトの実行を待たずに】パースとレンダリングを継続できる。BODY要素に、何回出現してもよい。SCRIPT要素の内容か、または外部ファイルで定義される。src属性の設定がない場合、ユーザエージェントは当該要素の内容をスクリプトであると解釈しなければならない。src属性の値がURIだった場合、ユーザエージェントは当該要素内容を無視し、このURIからスクリプトを取得する必要がある。SCRIPT要素とは無関係であることに、注意されたい。スクリプトはスクリプトエンジンによって評価される。スクリプトエンジンはユーザエージェントにとって既知でなければならない。スクリプトデータのシンタクスは各スクリプト言語に依存する。スクリプト言語の指定HTMLは特定スクリプト言語に依存しないため、著者はユーザエージェントに対し、各スクリプトの言語を明示しなければならない。スクリプト言語は、デフォルト宣言と局所宣言の双方で明示することができる。META宣言で、次のように指定しなければならない。content="type">このtypeは、スクリプト言語を示すMIMEタイプで、例えば、「text/tcl」、「text/javascript」、「text/vbscript」である。META宣言が存在しない場合、デフォルトは「Content-Script-Type」HTTPヘッダで指定できる。typeこのtypeも、スクリプト言語を示すMIMEタイプである。ユーザエージェントは、次の優先順位に従ってデフォルトのスクリプト言語を決定する必要がある。Content-Script-Typeを指定するMETA宣言がある場合、文字列中で最後に現れる宣言の内容をデフォルトのスクリプト言語に決定する。したMETA宣言がなく、Content-Script-Typeを指定するHTTPヘッダがある場合、文字列中で最後に現れるヘッダの内容をデフォルトのスクリプト言語に決定する。組込みイベントスクリプトが指定された要素を含むものは、不正である。ユーザエージェントはこれを解釈しようと試みてもよいが、解釈を試みるよう要求されるわけではない。オーサリングツールは、著者が不正な文書を作らないですむよう、デフォルトスクリプト言語の情報を生成する必要がある。SCRIPT要素インスタンスも、type属性が指定されていなければならない。あるSCRIPT要素のtype属性値は、当該要素のデフォルトスクリプト言語を上書きする。次の例は、デフォルトのスクリプト言語を「text/tcl」と宣言している。ヘッダにはSCRIPT要素が1つあり、これは外部ファイルの、text/vbscriptであるスクリプトを用いる。本文にあるSCRIPT要素の内容は、text/javascriptで記されている。type="text/javascript">...JavaScriptのスクリプト...</SCRIPT></BODY></HTML>スクリプトからHTMLの要素を参照する各スクリプト言語には、スクリプト内からHTML文書オブジェクトを参照するための規約が存在する。本仕様は、HTML文書オブジェクトを参照するための標準機構を定義するものではない。スクリプトから要素への参照は、要素名に従わねばならない。スクリプトエンジンは、要素を識別する際に次の優先基準に従う必要がある。id属性の双方が設定されている場合はname属性が優先する。次に、どちらか一方の場合は、ある方を用いる。HTML文書の著者への助言。組込みイベントの領域では、例えばスクリプトとイベントとの結合方法など、頻繁に変更があり得る。この領域の研究は、W3Cの文書オブジェクトモデル作業班のメンバーが行なっている。[CT]onloadイベントは、ユーザエージェントが1つのウインドウの読み込みを終了した時点、あるいは1つのFRAMESET中のすべてのフレームの読み込みを終了した時点で発生する。この属性は、BODY要素とFRAMESET要素で使える。[CT]onunloadイベントは、ユーザエージェントが1つのウインドウあるいはフレームから文書を除去する時点で発生する。BODY要素とFRAMESET要素で使える。[CT]onclickイベントは、ポインティングデバイスのボタンが要素の上でクリックされた時点で発生する。この属性は、ほとんどの要素で使える。[CT]ondblclickイベントは、ポインティングデバイスのボタンが要素の上でダブルクリックされた時点で発生する。この属性は、ほとんどの要素で使える。[CT]onmousedownイベントは、ポインティングデバイスのボタンが要素の上で押し下げられる際に発生する。この属性は、ほとんどの要素で使える。ポインティングデバイスのボタンが要素の上で放される際に発生する。この属性は、ほとんどの要素で使える。[CT]onmouseoverイベントは、ポインティングデバイスが要素の上に移動してきた際に発生する。この属性は、ほとんどの要素で使える。[CT]onmousemoveイベントは、ポインティングデバイスが要素の上を移動する際に発生する。この属性は、ほとんどの要素で使える。[CT]onmouseoutイベントは、ポインティングデバイスが要素の上から離れていく際に発生する。この属性は、ほとんどの要素で使える。[CT]onfocusイベントは、ポインティングデバイスかタブ移動によって要素がフォーカスを受けた際に発生する。この属性は次の要素で使える。SELECT、TEXTAREA、BUTTON。[CT]onblurイベントは、ポインティングデバイスかタブ移動によって要素がフォーカスを失った際に発生する。この属性はonfocus属性と同じ要素で使える。[CT]onkeypressイベントは、要素上で何かあるキーが押されて放された際に発生する。この属性は、ほとんどの要素で使える。[CT]onkeydownイベントは、要素上で何かあるキーが押し下げられる際に発生する。この属性は、ほとんどの要素で使える。[CT]onkeyupイベントは、要素上で何かあるキーが解放される際に発生する。この属性は、ほとんどの要素で使える。[CT]onsubmitイベントは、フォームが提出される際に発生する。この属性はFORM要素のみに適用される。[CT]onresetイベントは、フォームがリセットされる際に発生する。FORM要素のみに適用される。[CT]onselectイベントは、ユーザがテキストフィールド中のテキストを選んだ際に発生する。TEXTAREA要素で使える。[CT]onchangeイベントは、コントロールが入力フォーカスを失った際に、フォーカスを得た時と比べて値が変化していた時に発生する。TEXTAREA要素に適用できる。ユーザがユーザエージェントと対話する際に発生する複数のイベントと1つの動作を結びつけることも可能である。上に列挙した「組込みイベント」はどれも、スクリプトを値に取る。このスクリプトは、当該要素に関係するイベントが発生する度に常に実行される。スクリプトデータのシンタクスは、各スクリプト言語に依存する。TEXTAREA、並びにLABEL要素は、すべて何らかの組込みイベントに反応する。これらの要素がフォームの外部に出現する場合、これは文書のグラフィカルなユーザインターフェースを増強するために使われていると思われる。アクティブになった際に、フォームを提出するのではないがサーバと交信をするような押しボタンを文書に組込みたいと考える著者もあろう。ここで、組み込みイベントに基づくユーザインターフェース機能と利用可能なコントロールの例を幾つか示す。次の例では、userNameへのテキスト入力が要求される。onblurイベントがJavaScriptの関数を呼び出し、userNameに適切な値が入力されているかどうかが検定される。onblur="validUserName(this.value)">更に別のJavaScriptの例を示す。VALUE="0">今度はテキストフィールドのイベントハンドラであるVBScriptの例を示す。</SCRIPT>これをTclにした例を示す。</SCRIPT>続いて、スクリプトの記述内容にイベントを組込んだJavaScriptの例を示す。単純なクリックハンドラの例。</BUTTON>次に、もう少し面白いウインドウハンドラの例。my_onload</SCRIPT>これはTclでは次のようになる。</SCRIPT>ここで、組込みイベントハンドラ中の「document.write」あるいはこれと等価な命令文が、現在の文書を更新するのではなく新しい文書を作成するのである点に注意されたい。文書の読み込みと同時に実行されるスクリプトは、文書の内容を動的に変更できる。この変更能力は、スクリプト言語自体に依存する。複数のベンダーがHTMLオブジェクトモデルの「document.write」命令文をサポートしている。文書の動的変更は、次のようにモデル化できる。SCRIPT要素は、文書が読み込まれる際の順番で評価される。CDATAを形成する、すべてのスクリプト構成素が評価される。その結合生成テキストは、文書中の当該SCRIPT要素の位置に挿入される。生成されたCDATAは、再評価される。DTDに適合するよう制約される。次の例は、スクリプトが文書をどのように動的に変更するかを示す。</SCRIPT>上のスクリプトは、次のHTMLマーク付けと同等の効果を持っている。スクリプトをサポートしないユーザエージェント向けの文書設計この節では、著者が、スクリプトをサポートしないユーザエージェントで機能する文書をどのように作ればいいかを説明する。必須NOSCRIPT要素を使うと、著者は、スクリプトが実行されない際の代替内容を提供できる。NOSCRIPT要素の内容を、次の場合にしかレンダリングしてはいけない。スクリプトを評価しないよう設定されている場合。文書の初めの方にあるSCRIPT要素のスクリプト言語が、サポートしていないものである場合。クライアント側スクリプトをサポートしていないユーザエージェントは、この要素の内容をレンダリングしなければならない。次の例では、SCRIPTを実行するユーザエージェントは動的に生成したデータをいくつか文書に組込み、スクリプトをサポートしないユーザエージェントでも、ユーザはリンクを通じてデータを取得できる。href="http://someplace.com/data">data.</A>にアクセスされたし。スクリプトデータをユーザエージェントから隠すSCRIPT要素を認識しないユーザエージェントは、要素の内容をテキストとしてレンダリングしようとしがちである。JavaScript、VBScript、並びにTclを含むいくつかのスクリプトエンジンは、スクリプトの命令文をSGMLコメントに囲い込むことを許容している。そこで、SCRIPT要素を認識しないユーザエージェントはコメントを無視するが、マトモなスクリプトエンジンはコメント中のスクリプトを実行する必要があることを理解する。src属性で参照することである。JavaScriptでのコメント化スクリプトJavaScriptエンジンは、SCRIPT要素の始めに文字列「<!--」が存在することを許容し、この場合当該行の末尾までの文字を無視する。JavaScriptは、「//」を当該行の末尾まで続くコメントの開始であると解釈する。この「//」は、【SGMLコメントを閉じる】文字列「-->」をJavaScriptパーサから隠すために必要とされる。--></SCRIPT>VBScriptでのコメント化スクリプトVBScriptでは、単引用符によって、当該行の残りの部分がコメントとして扱われることとなる。そこで、単引用符が、VBScriptで「-->」を隠すために使われる。</SCRIPT>Tclでのコメント化スクリプトTclでは、「#」が当該行の残りの部分をコメントとする。--></SCRIPT>注意。ブラウザの中には、最初の「>」という文字でコメントを閉じるものもある。x」と記すなど、関係演算子や移動演算子において被演算子を移項するといった手法や、各スクリプト言語固有の方法で「>」をエスケープするといった手法が取り得る。正規の規定は英語版です。この文書は参考に過ぎません。翻訳上の誤りがあり得ます。このファイルは2000年10月14日版です。uchida@happy.email.ne.jp。