object
要素 declare
属性 (HTML, XHTML 1)[1] HTML の object
要素の
declare
属性は、
その object
が宣言のみであることを示します。
物体は、この宣言を参照する後の object
で実現値化しなければなりません。
param
要素を使った実行時引数として他の物体に引き渡せます。[2] 仕様書:
実装仕様:
[3] この属性は真偽値属性です。 指定すれば真 (宣言のみである)、 省略すれば偽 (宣言のみではない) になります。
[6] declare
な object
は、 UA が読んだときに実行はされません。
後から実現値化されて実行されます。
実現値化は、その object
を参照する要素をレンダリングする必要のある度に
(その object
を参照する連結や object
などが活性化される度に) 行われます。 [HTML 4]
[5] declare
に対応していない UA
は、 object
の内容をレンダリングしなければなりません
[HTML 4] 。
[11]
HTML 4 DTD の注釈 (参考) には
declare but don't instantiate flag
と書かれています。
[10] フォームの提出との関係
declare
な object
は、
フォームの提出に際して成功とは見なさないべきです。
HTML 4 17.13.2
[7] 識別子
後から object
を識別するために、
id
属性が必要です。
HTML 4
[13] 参照するものとの位置関係
declare
な object
はその object
の最初の実現値より前になければなりません。
HTML 4
[8] 連結によって実現値化する例
<P><OBJECT declare id="EARTH.DECLARATION" data="TheEarth.mpeg" type="video/mpeg"> The <STRONG>Earth</STRONG> as seen from space. </OBJECT> ...later in the document... <P>A neat <A href="#EARTH.DECLARATION">animation of The Earth!</A>
(HTML 4 仕様書より、改)
この例では、 animation of The Earth!
というリンクによって地球の動画を活性化することができます。
[9] 物体の実行時引数として引き渡す例:
<P><OBJECT declare id="TRIBUNE" type="application/x-webfont" data="tribune.png"> </OBJECT> ...view the poem in KublaKhan.txt here... <P><OBJECT classid="http://foo.bar.example/poem_viewer" data="KublaKhan.txt"> <PARAM name="font" valuetype="object" value="#TRIBUNE"> <P>Read <A href="KublaKhan.txt">KublaKhan</A>! </OBJECT>
(HTML 4 仕様書より、改)
(この例では value
属性に URI参照のような値が使われています。
しかし、 HTML 4 の valuetype
属性の規定を読む限りでは、
IDREF
のように TRIBUNE
とだけ指定しなければならないはずです。)
[14]
object
要素型がまだ insert
と呼ばれていた当初の仕様案では、 alias
要素型が定義されていました。この要素型の要素は、
insert
と似ていますが、
実際に文書中に物体を挿入はせず、
param
から参照して使用することとしていました。
param
要素から物体を参照するための方法として用意されたようです。
[15]
その後 insert
から object
に要素型名が変更された際に、 alias
も統合されて、 declare
真偽値属性が設けられました。機能的には前案 >>14
と同じで、 param
から
物体を参照するためのものだったようです。
[16] 更に、 URI が指定できる場所に物体を指定するためという用法が追加されます。
a
要素の href
属性を declare
された
object
を指す同文書参照とすると、
その物体へのリンクとなります。
(活性化すると現在の HTML 文書の代わりに宣言された物体が
Webブラウザ画面に表示されます。)
body
要素の background
属性に同様に指定すると、背景がその物体になります。
高度なアニメーションを背景にしたい時などに使えるのだそうです。
(この記述は3月25日案で消滅しています。)
[17] その後ほぼそのままの内容の仕様案が続きましたが、 1997年7月の HTML 4 仕様案に取り込まれるにあたって全体的に書きなおされました。
この時に、2つ目のリンク先を物体にするという用途について、 現在の頁の代わりにという記述はなくなっています。 しかも、
<OBJECT declare id="earth_declaration" data="TheEarth.mpeg" type="application/mpeg"> <OBJECT src="TheEarth.gif"> The <STRONG>Earth</STRONG> as seen from space. </OBJECT> </OBJECT> ...later in the document... Click to see a neat <A href="#earth_declaration"> animation of The Earth!</A>
のような使用例がある位ですから、
現在のページの代わりに
という仕様から、
宣言された場所に、と変更されたようです。
object
は次の案で削除されて、 >>8 のようになっています。
<http://www.w3.org/TR/WD-html40-970917/struct/objects.html#h-14.2.4>リンクの活性化の前後で][レンダリング]]がどう変化するべきなのかがよくわからない、 実装不能な仕様になってしまいました。仕様案のこの部分は、 HTML 4.01 勧告までほとんど変わっていません。
[18]
WinIE や Gecko をはじめ、 HTML 4 以後の各種 Webブラウザは、
DOM 属性としての declare
には対応していますが、 HTML 4 で規定された
declare
の機能は実装していません。
(WinIE については MSDN、Gecko については >>12 を参照。)
[19]
Ian Hickson は2005年9月に、 HTML 5 には
declare
属性を含めないつもりであると述べています
(>>12)。
[20]
デスクトップ環境の視覚ブラウザで無視されてきた
declare
属性ですが、
NTTドコモのiモード対応HTML では、
Version 3.0 (2001年) で object
要素型が追加されると同時に
declare
属性が追加されています。
iモードにおける declare
属性は、旧仕様案の2つ目の用法 (>>16) と同じで、
iアプリなどの携帯電話端末上で動作するプログラムを、
現在の文書に埋め込むのではなく、それだけで表示させるための
a
要素のリンク先として使われます。
href
属性ではなく ijam
属性などの媒体型に応じた属性で指定します。
未対応の利用者エージェントで華麗にスルーできるようにそうなっていると思われます。現実の使用例では、 object
要素は
head
内に入っていたり body
内におかれたりしますが、いずれも空要素とするようです。
[12] Bug 164979 - Implement declare attribute for object tag <https://bugzilla.mozilla.org/show_bug.cgi?id=164979>