* [CODE(HTMLe)@en[object]] 要素 [CODE(HTMLa)@en[declare]] 属性 (HTML, XHTML 1) [1] [[HTML]] の [CODE(HTMLe)[[[object]]]] 要素の [DFN[[CODE(HTMLa)[declare]] 属性]]は、 その [CODE(HTMLe)[object]] が宣言のみであることを示します。 物体は、この宣言を参照する後の [CODE(HTMLe)[object]] で実現値化しなければなりません。 :状態:[[W3C]] [[勧告]] :[[名前空間URI]]:([[[CODE@en[null]]名前空間]]) :[[局所名]]:[CODE(HTMLa)@en[[[declare]]]] ([Q@en[declare]] ([Q[宣言]]) より) :[[属性型]]:([[真偽値属性]]) :[[既定値]]:([[偽]]) [4] [CODE(HTMLe)[object]] 宣言を使うと、 - 一つの物体から複数個の[[実現値]]を生成できます。 - しかし UA がデータを取りに行くのは1度で済みます。 - 物体の宣言以外の場所、例えば[[連結]]から物体を実現値化できます。 - [CODE(HTMLe)[[[param]]]] 要素を使った実行時引数として他の物体に引き渡せます。 [2] 仕様書: - [[HTML 4]] -- [CODE(HTMLe)[object]] 要素 [CODE(HTMLa)[declare]] 属性 -- [CITE[13.3.4 Object declarations and instantiations]] -- [CITE[17.13.2 Successful controls]] 実装仕様: - [MSDN] [CITE@en[DECLARE Attribute | declare Property (OBJECT) (Internet Explorer)]] [[#comment]] ** 属性値 [3] この属性は[[真偽値属性]]です。 指定すれば[[真]] (宣言のみである)、 省略すれば[[偽]] (宣言のみではない) になります。 [[#comment]] ** 機能 [6] [CODE(HTMLa)[declare]] な [CODE(HTMLe)[object]] は、 UA が読んだときに実行はされません。 後から実現値化されて実行されます。 実現値化は、その [CODE(HTMLe)[object]] を参照する要素をレンダリングする必要のある度に (その [CODE(HTMLe)[object]] を参照する[[連結]]や [CODE(HTMLe)[object]] などが[[活性化]]される度に) 行われます。 [SUP[ [HTML 4] ]] [5] [CODE(HTMLa)[declare]] に対応していない UA は、 [CODE(HTMLe)[object]] の内容をレンダリングしなければなりません [SUP[ [HTML 4] ]]。 [11] HTML 4 DTD の[[注釈]] (参考) には [Q[declare but don't instantiate flag]] と書かれています。 [[#comment]] ** 関連 [10] '''フォームの提出との関係''' [CODE(HTMLa)@en[[[declare]]]] な [CODE(HTMLe)@en[[[object]]]] は、 [[フォーム]]の[[提出]]に際して[[成功]]とは見なさないべきです。 [SRC@en[HTML 4 17.13.2]] [7] '''識別子''' 後から [CODE(HTMLe)[object]] を識別するために、 [CODE(HTMLa)[[[id]]]] 属性が必要です。 [SRC@en[HTML 4]] [13] '''参照するものとの位置関係''' [CODE(HTMLa)[declare]] な [CODE(HTMLe)[object]] はその [CODE(HTMLe)[object]] の最初の実現値より前になければなりません。 [SRC@en[HTML 4]] [[#comment]] ** 例 [8] 連結によって実現値化する例 [PRE(HTML)[

The Earth as seen from space. ...later in the document...

A neat animation of The Earth! ]PRE] [WEAK[(HTML 4 仕様書より、改)]] この例では、 [Q[animation of The Earth!]] というリンクによって地球の動画を活性化することができます。 [9] 物体の実行時引数として引き渡す例: [PRE(HTML)[

...view the poem in KublaKhan.txt here...

Read KublaKhan!

]PRE] [WEAK[(HTML 4 仕様書より、改)]] (この例では [CODE(HTMLa)[[[value]]]] 属性に [[URI参照]]のような値が使われています。 しかし、 HTML 4 の [CODE(HTMLa)[[[valuetype]]]] 属性の規定を読む限りでは、 [CODE(SGML)[[[IDREF]]]] のように [SAMP[TRIBUNE]] とだけ指定しなければならないはずです。) [[#comment]] ** 歴史 [14] [CODE(HTMLe)@en[[[object]]]] [[要素型]]がまだ [CODE(HTMLe)@en[[[insert]]]] と呼ばれていた当初の仕様案では、 [CODE(HTMLe)@en[[[alias]]]] [[要素型]]が定義されていました。この[[要素型]]の[[要素]]は、 [CODE(HTMLe)@en[[[insert]]]] と似ていますが、 実際に[[文書]]中に[[物体]]を[[挿入]]はせず、 [CODE(HTMLe)@en[[[param]]]] から参照して使用することとしていました。 [CODE(HTMLe)@en[[[param]]]] [[要素]]から[[物体]]を参照するための方法として用意されたようです。 ;; [CITE@en[HTML3 Linking and Embedding Model]] [CSECTION@en[The ALIAS element]] [15] その後 [CODE(HTMLe)@en[[[insert]]]] から [CODE(HTMLe)@en[[[object]]]] に[[要素型名]]が変更された際に、 [CODE(HTMLe)@en[[[alias]]]] も統合されて、 [CODE(HTMLa)@en[[[declare]]]] [[真偽値属性]]が設けられました。機能的には前案 >>14 と同じで、 [CODE(HTMLe)@en[[[param]]]] から [[物体]]を参照するためのものだったようです。 ;; [CITE@en[HTML3 Linking and Embedding Model]] [CSECTION@en[More Information About OBJECT DECLARE]] [16] 更に、 [[URI]] が指定できる場所に[[物体]]を指定するためという用法が追加されます。 [CODE(HTMLe)@en[[[a]]]] [[要素]]の [CODE(HTMLa)@en[[[href]]]] [[属性]]を [CODE(HTMLa)@en[[[declare]]]] された [CODE(HTMLe)@en[[[object]]]] を指す[[同文書参照]]とすると、 その[[物体]]への[[リンク]]となります。 ([[活性化]]すると現在の [[HTML]] [[文書]]の代わりに宣言された[[物体]]が [[Webブラウザ]]画面に表示されます。) [CODE(HTMLe)@en[[[body]]]] [[要素]]の [CODE(HTMLa)@en[[[background]]]] [[属性]]に同様に指定すると、[[背景]]がその[[物体]]になります。 高度な[[アニメーション]]を[[背景]]にしたい時などに使えるのだそうです。 (この記述は3月25日案で消滅しています。) ;; =1996年3月11日案 [CITE@en[Inserting objects into HTML]] =-[CSECTION@en[More Information About OBJECT DECLARE]] =-[CSECTION@en[Document Background]] =1996年3月25日案 [CITE@en[Inserting objects into HTML]] [17] その後ほぼそのままの内容の仕様案が続きましたが、 1997年7月の [[HTML 4]] 仕様案に取り込まれるにあたって全体的に書きなおされました。 ;; [CITE@en[Inclusions in HTML documents]] この時に、2つ目のリンク先を[[物体]]にするという用途について、 現在の頁の代わりにという記述はなくなっています。 しかも、 [PRE(HTML example code)[ The Earth as seen from space. ...later in the document... Click to see a neat animation of The Earth! ]PRE] のような使用例がある位ですから、 [Q[現在のページの代わりに]]という仕様から、 宣言された場所に、と変更されたようです。 ;; もっとも、以前の案から、 未対応で[[代替内容]]が[[レンダリング]]される時に[[リンク]]を[[活性化]]したらどうなるのかは明らかではありませんでしたが。 ;; ただ、この例の[[代替内容]]としての [CODE(HTMLe)@en[[[object]]]] は次の案で削除されて、 >>8 のようになっています。 [[リンク]]の[[活性化]]の前後で][レンダリング]]がどう変化するべきなのかがよくわからない、 実装不能な仕様になってしまいました。仕様案のこの部分は、 [[HTML 4.01]] [[勧告]]までほとんど変わっていません。 [18] [[WinIE]] や [[Gecko]] をはじめ、 [[HTML 4]] 以後の各種 [[Webブラウザ]]は、 [[DOM]] [[属性]]としての [CODE(DOMa)@en[[[declare]]]] には対応していますが、 [[HTML 4]] で規定された [CODE(HTMLa)@en[[[declare]]]] の機能は実装していません。 ([[WinIE]] については [CITE@en[MSDN]]、[[Gecko]] については >>12 を参照。) [19] [[Ian Hickson]] は2005年9月に、 [[HTML 5]] には [CODE(HTMLa)@en[[[declare]]]] [[属性]]を含めないつもりであると述べています (>>12)。 [20] [[デスクトップ]]環境の[[視覚ブラウザ]]で無視されてきた [CODE(HTMLa)@en[[[declare]]]] [[属性]]ですが、 [[NTTドコモ]]の[[iモード対応HTML]] では、 Version 3.0 (2001年) で [CODE(HTMLe)@en[[[object]]]] [[要素型]]が追加されると同時に [CODE(HTMLa)@en[[[declare]]]] [[属性]]が追加されています。 ;; [CITE[作ろうiモードコンテンツ | NTTドコモ]] [[iモード]]における [CODE(HTMLa)@en[[[declare]]]] [[属性]]は、旧仕様案の2つ目の用法 (>>16) と同じで、 [[iアプリ]]などの[[携帯電話]]端末上で動作するプログラムを、 現在の文書に埋め込むのではなく、それだけで表示させるための [CODE(HTMLe)@en[[[a]]]] [[要素]]の[[リンク先]]として使われます。 ;; ただし、 [[HTML 4]] の例とは異なり、 [CODE(HTMLa)@en[[[href]]]] [[属性]]ではなく [CODE(HTMLa)@en[[[ijam]]]] [[属性]]などの[[媒体型]]に応じた[[属性]]で指定します。 未対応の[[利用者エージェント]]で[[華麗にスルー]]できるようにそうなっていると思われます。 現実の使用例では、 [CODE(HTMLe)@en[[[object]]]] [[要素]]は [CODE(HTMLe)@en[[[head]]]] 内に入っていたり [CODE(HTMLe)@en[[[body]]]] 内におかれたりしますが、いずれも[[空要素]]とするようです。 [[#comment]] ** 実装 [12] [CITE@en[Bug 164979 - Implement declare attribute for object tag]] [[#comment]] ** メモ [[#comment]] * メモ