Section 13 : オブジェクト(3)

 Section 12 では簡単なオブジェクトの貼り込みをご覧いただいたが,ここでは,オブジェクトの指定についていくつか述べることにしよう。

<PARAM>

 オブジェクトの中には実行時にパラメータをとるものがある。アプレットのたぐいは,それが自己完結的なものでない限り実行時にいくつかのパラメータを設定することになるだろう。

<PARAM>

 これは“ここに”のかたちで書かれ,<OBJECT> 内で用いる

 パラメータは属性によって渡される。

<PARAM> の属性
属性 解説
NAME 文字列 オブジェクトに渡すパラメータ名。必須
VALUE 文字列 オブジェクトに渡すパラメータの値。その解釈は VALUETYPE 属性による。
VALUETYPE キーワード パラメータの値をオブジェクトに対しどのように渡すかを指定する。
TYPE MIME タイプ VALUETYPE 属性が ref のときに指定する。VALUE 属性がさすリソースの MIME タイプ。

 <PARAM> は,ID 属性はもつが,STYLE,CLASS 属性,イベント属性は持たない。

 VALUETYPE 属性のキーワードに触れておこう。

data
そのまま(文字列として)渡す。既定値。
ref
VALUE 属性の値を URI とみて,その指すものを値として渡す。このとき,その MIME タイプは TYPE 属性に与える。
object
オブジェクトへのパラメータとしてオブジェクトを渡す。DECLARE 属性で宣言のみされたオブジェクトの ID 属性で参照する。

 パラメータを与える例を見てみよう。

<P>
  <OBJECT CODETYPE="application/java" CLASSID="java:flowtext.class">
    <PARAM NAME="m_text" VALUE="Academic HTML">
    Java 対応ブラウザではここにアプレットが表示されます。
  </OBJECT>
</P>

 ここではアプレット“flowtext.class”のパラメータ“m_text”に値“Academic HTML”を渡している(VALUETYPE 属性は省略されているから,data として文字列の形で渡される)。<OBJECT> 内部の記述はオブジェクトが処理不可能の場合に使われると述べたが,<PARAM><OBJECT> 内部に書かれてはじめて有効になり,それが書かれたすぐ外側の <OBJECT> に対してのみ,パラメータを渡す。したがって,複数の候補をあげているとき,たとえば以下の場合,

<P>
  <OBJECT CLASSID="flowtext.py">
    <PARAM NAME="text1" VALUE="Academic HTML">
    <OBJECT CODETYPE="application/java" CLASSID="java:flowtext.class">
      <PARAM NAME="text2" VALUE="Academic HTML">
      Java 対応ブラウザではここにアプレットが表示されます。
    </OBJECT>
  </OBJECT>
</P>

Python アプレットが表示された場合には“text1”のパラメータが,Java アプレットが表示されたときは“text2”のパラメータが,それぞれ有効になる。

 次に,VALUETYPE 属性を ref とする例をあげておく。

<P>
  <OBJECT CLASSID="http://www.netsite.com/prog/pngview">
    <PARAM VALUE="image" VALUETYPE="ref" TYPE="image/png" VALUE="./myimage.png">
    </OBJECT>
</P>

パラメータ“image”の値は,VALUE 属性で指定された URI にある PNG イメージである。

オブジェクトの宣言

 <OBJECT> に対して DECLARE 属性を指定するとそのオブジェクトは宣言されただけで実行はされない。このとき,参照されることを見越して ID 属性を指定しておかなくてはならない

 宣言のみされたオブジェクトは,さきほどの <PARAM> がオブジェクトを値とするときに <A NAME="..."> の場合と同じようにハッシュ記号「#」を冠して参照される。

<P><OBJECT DECLARE ID="obj1" ...></OBJECT>
  <OBJECT ...>
    <PARAM NAME="param1" VALUETYPE="object" VALUE="#obj1">
    Sorry, can't render.
  </OBJECT>
</P>

このとき,宣言は使用する前に行う必要がある。

 また,1 つの宣言に対していくつもの実体を確保することも可能である。一度読み込んでおいて,データを使い回すことも可能である。

 一般に,宣言されたオブジェクトは参照されるたびに必要に応じて実体が確保される。たとえば,<A HREF="..."> で参照して実体を確保することも可能である。

 <OBJECT> はヘッダ部分に書くこともできる。このときは <OBJECT>...</OBJECT> は空でなくてはならない。これを用いて,たとえば,フレーム分割の HTML にオブジェクトを置いておく(表示はされない)。こうしておくと,フレーム内の HTML からスクリプトのドキュメントオブジェクトモデル(DOM)を用いて,1 つの宣言からオブジェクトのプロパティなどを何回も参照できる。

 繰り返すようだが,オブジェクト指定はそのタイプによってさまざまである。使用するときはそれぞれについて指定するべきものやその方法を調べることが必要である。