* object 要素型 (HTML, XHTML 1) [4] [[HTML]] の [DFN[[CODE(HTMLe)[object]] 要素型]]は、 HTML 文書に[RUBY[[[物体]]] [オブジェクト]]を埋込むための一般的な仕組みを提供しています。 [5] 仕様書: - [[HTML 4]] -- 13.1 Introduction to objects, images, and applets -- 13.3 Generic inclusion: the [CODE(HTMLe)[OBJECT]] element -- 13.5 Notes on embedded documents [9] 多くの [[WWWブラウザ]]は自前で HTML や画像などを解釈することができますし、 そうでない形式では他のプログラムを起動して処理させるなどすることができます。 [CODE(HTMLe)[object]] を使うと外部のプログラムを起動するか著者の指定したプログラムを使うか、 といったようなことを記述できます。 [HTML 4] ほとんどの場合著者は次の3種類の情報を指定する必要があります。 常に3種類とも必要ではなく、場合によっていろいろです。 [HTML 4] - 取込む物体の実装。例えば、時計アプレットであればアプレットの実行可能符号の場所。 - レンダリングするデータ。例えば、フォント・データをレンダリングするプログラムなら、 フォント・データの場所。 - 実行時の追加の引数。例えば、アプレットの初期値。 前2者は属性、引数は子 [CODE(HTMLe)[[[param]]]] 要素を使います。 [6] :[[局所名]]:[CODE(HTMLe)[object]] :[[名前空間名]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] :[[開始タグ]]:必須 :[[終了タグ]]:必須 :[[内容模型]]:[CODE(SGML)[[CODE(HTMLe)[[[param]]]]*]] の後に [CODE(SGML)[(%[[flow]])*]] :出現できる文脈:[CODE(SGML)[%inline]] な文脈。 (歴史的変遷: ) :[[属性]]: ,属性名,属性値,既定値,説明,状態,出典 ,[CODE(HTMLa)[[[accesskey]]]],,,,非標準 ,[CODE(HTMLa)[[[align]]]] , , ,揃え位置 ,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[archive]]]] ,[CODE(ABNF)[[CODE(SGML)[ [%[[URI]]]] *(*[[s]] [CODE(SGML)[%URI]])] ]] , , ,[HTML 4] ,[CODE(HTMLa)[[[border]]]],,,境界線,非標準 ,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]] ,[CODE(HTMLa)[[[classid]]]] ,[CODE(SGML)[%[[URI]]]] , ,実装識別子 ,[HTML 4] ,[CODE(HTMLa)[[[code]]]],,,,非標準 ,[CODE(HTMLa)[[[codebase]]]] ,[CODE(SGML)[%[[URI]]]] ,(継承) ,基底 URI ,[HTML 4] ,[CODE(HTMLa)[[[codetype]]]] ,[CODE(SGML)[%[[ContentType]]]] , ,符号内容型 ,[HTML 4] ,[CODE(HTMLa)[[[data]]]] ,[CODE(SGML)[%[[URI]]]] , ,データ URI ,[HTML 4] ,[CODE(HTMLa)[[[datafld]]]],,,データ欄,非標準 ,[CODE(HTMLa)[[[datasrc]]]],[CODE(SGML)[%[[URI]]]],,データ源,非標準 ,[CODE(HTMLa)[[[declare]]]] ,([[真偽値属性]]) ,(偽) ,宣言のみ ,[HTML 4] ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]] ,[CODE(HTMLa)[[[height]]]] ,[CODE(SGML)[%[[Length]]]] , ,高さ ,[HTML 4] ,[CODE(HTMLa)[[[hspace]]]] , , ,水平余白 ,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1] ,[CODE(HTMLa)[[[longdesc]]]] ,[CODE(SGML)[%[[URI]]]] ,(なし) ,説明文書 ,[HTML 4] ,[CODE(HTMLa)[[[name]]]] , ,(なし) ,名前 ,[HTML 4] ,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousemove]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events ,[CODE(XMLa)[[QN[slide:[VAR[*]]][[[http://www.w3.org/Consortium/Offices/Presentations/xsltSlidemaker]]]],,, ,[CODE(HTMLa)[[[standby]]]] ,[CODE(SGML)[%[[Text]]]] , ,読込み中メッセージ ,[HTML 4] ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[tabindex]]]] ,[CODE(SGML)[[[NUMBER]]]] ,(自動) ,タブ順 ,[HTML 4] ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[type]]]] ,[CODE(SGML)[%[[ContentType]]]] , ,データ内容型 ,[HTML 4] ,[CODE(HTMLa)[[[usemap]]]] , ,(なし) ,[[クライアント側画像写像]] ,[HTML 4] ,[CODE(HTMLa)[[[vspace]]]] , , ,垂直余白 ,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[width]]]] ,[CODE(SGML)[%Length]] , ,幅 ,[HTML 4] ,[CODE(XMLa)[[[xmlns]]]],[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] 固定,==,[[名前空間名]],W3C 勧告,[[XHTML m12n]] [[#comment]] ** 内容模型 [7] [CODE(HTMLe)[object]] 要素の内容は HTML 4 DTD では [CODE(SGML)[([CODE(HTMLe)[param]] | %[[flow]];)*]] とされていますが、仕様書本文の規定により [CODE(HTMLe)[param]] は他の内容よりも前に来なければなりません。 こうしているのは SGML DTD で直接表現することが困難だからです。 仕様書の記述を超厳密に解釈するなら、どんな[Q[内容]]も [CODE(HTMLe)[param]] の前に来れないのですから、 [[空白]]や[[注釈宣言]]なども来てはいけないことになってしまいますが、 それではわざわざ DTD で不正確に表現している意味がありませんから、 他の要素や非空白文字を制限していると解釈するのが妥当でしょう。 [14] [CODE(HTMLe)[[[head]]]] 内の [CODE(HTMLe)[object]] では内容を含めるべきではありません。 [HTML 4] [Q[べき]]だから禁止じゃないのか・・・。 [CODE(HTMLe)[param]] も入れないべきなのでしょうかねぇ。 [15] 内容には [CODE(HTMLe)[object]] をレンダリングできないときの[[代替文]]を入れるべきです。 [HTML 4] [31] HTML 4 DTD の[[注釈]] (参考) には [Q[PARAM elements should precede other content. SGML mixed content model technicality precludes specifying this formally ...]] ([CODE(HTMLe)[param]] は他の内容の前に来るべきです。 SGML の[[混合内容模型]]ではこれを形式的に記述できません。。。) と書かれています。 ([[名無しさん]] [sage]) [[#comment]] ** 出現する文脈 [10] [CODE(HTMLe)[object]] は [CODE(SGML)[%[[inline]]]] が使える場所だけでなく、 [CODE(HTMLe)[[[head]]]] 内に入れることもできます。 この場合、 [[UA]] は普通 [CODE(HTMLe)[head]] をレンダリングしないので、 著者はレンダリングされ得るデータを指定しないように注意するべきです。 [HTML 4] [[#comment]] ** 応用 [[#comment]] *** レンダリング [12] 仕様書: [[HTML 4]] 13.3.1 Rules for rendering objects [13] [[UA]] は、 = まず、 [CODE(HTMLe)[object]] をレンダリングしようと試みなければなりません。 -- [[内容]]をレンダリングするべきではありません。 (ということはしても間違いではないのか。) -- [CODE(HTMLe)[[[param]]]] や [CODE(HTMLe)[[[map]]]] が子供にいないか確認しないといけません。 = 何らかの理由 (しないように設定、資源不足、体系が間違いなど) でレンダリングできないときには内容をレンダリングしようと試みなければなりません。 [[#comment]] ** 他との関係 [8] [CODE(HTMLe)[object]] 要素は HTML への他の物体 (画像、音声、プログラム、HTML 文書、その他) の埋込みのための汎用の仕組みとして標準化されました。 [CODE(HTMLe)[[[img]]]], [CODE(HTMLe)[[[applet]]]], [CODE(HTMLe)[[[iframe]]]], [CODE(HTMLe)[[[embed]]]], その他同種の独自拡張の代替として使用できます。 [11] [CODE(HTMLa)[[[classid]]]] によって実装を、 [CODE(HTMLa)[[[data]]]] によってデータを指定することができますが、 両方指定した場合の挙動は未定義です。 可搬性のため、実装への追加データには [CODE(HTMLe)[param]] を使うべきです。 [SUP[ [HTML 4] ]] [29] [CODE(HTMLa)[usemap]] 属性を指定した場合は特別な扱いが規定されています ([HTML 4] )。 詳しくは [CODE(HTMLa)[[[usemap]>>17]]] をみてください。 ([[名無しさん]]) [[#comment]] *** HTML 文書の埋込み [25] 文書を参照する際に、単に[[リンク]]するだけでなく、 文書中に埋込みたいと思うことがあります。 そのような場合には、 [CODE(HTMLe)[object]] 要素型か [CODE(HTMLe)[[[iframe]]]] 要素型が使えます。 しかし、 [CODE(HTMLe)[object]] と [CODE(HTMLe)[iframe]] には幾つか異なる点があります。 [SUP[ [HTML 4] ]] [CODE(HTMLe)[iframe]] は - [[内容模型]]が異なります。 - 対象[RUBY[[[枠]]] [[[フレーム]]]]となることができます。 - [[UA]] で[Q[選択]]できます。 (選択すると印刷、 HTML ソース閲覧などの焦点を得ます。) -- 選ばれた枠は選ばれていない枠と違ってレンダリングできます。 (例えば選択した枠の周りに枠線を描くとかです。) 前2者はともかく、最後の1つは、こんなこと仕様書に書かれちゃうと [CODE(HTMLe)[object]] を甚だ不便に実装しなければならないことになってしまいます。 どうしてこんなおかしなことを書いてしまったのでしょう? ([[WinIE 5]] では [CODE(HTMLe)[iframe]] と HTML 文書の [CODE(HTMLe)[object]] を同じように扱っているように見えます。 [[WinIE 4]] でもおそらくそうでしょう。 仕様書の筆者は何を考えていたのでしょうか。) [26] 埋込まれた文書は親文書と完全に独立になります。 例えば、[[基底URI]] は継承されません。 たまたま表示されているのが窓全体ではなく他の文書の一部であったという程度です。 [SUP[ [HTML 4] ]] [27] 自分自身を埋込んだ場合の UA の挙動は未定義です [SUP[ [HTML 4] ]]。 最低でも、無限循環に陥って利用者が手を出せなくなる事態は避けるべきでしょう。 [[#comment]] ** 不思議解釈 [1] ''bubble hour - 2001/12 #1'' : [CODE(HTMLe)[object]] hack の「発見」。なんと[[神崎]]氏の見解も載っている。 [3] [WEAK[2004-02-11 18:39:43 +00:00]] ''[[satoshii]]'': >>1 まぁ、なんつーか…お察し下さい。 [2] ''(・▽・)えすともほめぱげ(・▽・)(2004-02-10)'' : 一見標準の皮をかぶった [CODE(HTMLe)[object]] 要素。だけどそれは腐った WinIE 対策で、 本命はその中の [CODE(HTMLe)[[[embed]]]] 要素が本命・・・という話。 (そんなときは [[W3C]] の XHTML 1.0 Transitional + embed DTD を使おう! [CODE(WikiPage)[[[embed]]]] 参照。) [[#comment]] ** 安全性 [34] [CODE(HTMLe)[[[img]]]] 要素型の安全性の項もご覧下さい。 [[#comment]] ** 例 [16] 時計アプレットの例 [PRE(HTML)[

An animated clock. ]PRE] [WEAK[(HTML 4 仕様書より)]] レンダリングできないときには代替文 [Q[An animated clock.]] がレンダリングされます。 この場合 UA が解釈したらすぐに時計がレンダリングされますが、 先に宣言だけしておいてレンダリングを遅延させることができます。 [HTML 4] [17] 色々な形式の例 [PRE(HTML)[

宇宙から見た地球 ]PRE] [WEAK[(HTML 4 仕様書より、改)]] [33] [[SVG]] 画像の埋込みで、未対応なら代わりに [[PNG]] 画像を使う例 [PRE(HTML example)[ <[CODE(HTMLe)[p]]><[CODE(HTMLe)[a]] [CODE(HTMLa)[name]]="figure41"> <[CODE(HTMLe)[object]] [CODE(HTMLa)[data]]="[CODE(URI)[figures/fig41.svg]]" [CODE(HTMLa)[type]]="[CODE(MIME)[image/svg+xml]]" [CODE(HTMLa)[height]]="290" [CODE(HTMLa)[width]]="640"> <[CODE(HTMLe)[img]] [CODE(HTMLa)[src]]="[CODE(URI)[png-figures/fig41.png]]" [CODE(HTMLa)[alt]]="Figure 4.1: Relationships between source, reference, PNG, and display images" [CODE(HTMLa)[height]]="280" [CODE(HTMLa)[width]]="640"> ]PRE] 出典: [CITE[Portable Network Graphics (PNG) Specification (Second Edition)]] [28] HTML 文書を埋込む例 [PRE(HTML)[ ...text before... It is described in another document. ...text after... ]PRE] [WEAK[(HTML 4 仕様書より、改)]] [[#comment]] ** メモ [30] [CODE[Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7) Gecko/20040803 Firefox/0.9.3]] でありますが、 [[XSLT]] [[結果木]]に [CODE(HTMLe)[object]] で他の HTML 文書を埋込むと、埋込んだ文書がなぜか強制的に [[UTF-8]] とみなされてしまいます。 ([CODE(HTTP)[[[Content-Type]]]] に [CODE(MIME)[[[charset]]]] を指定しているのに無視されます。) フレーム内の[[文字コード]]を強制指定する手段がないので[[文字化け]]を回避できません。 (埋込む文書も UTF-8 にするしかないと思われ。) ([[名無しさん]] [WEAK[2005-01-31 22:58:02 +00:00]]) [[#comment]] * applet 要素 object 属性 (HTML, XHTML 1) [18] [[HTML]] の [CODE(HTMLe)[[[applet]]]] 要素の [DFN[[CODE(HTMLa)[object]] 属性]]は、 applet の状態の直列化表現を含む資源を指定します。 [19] 仕様書: [[HTML 4]] [32] HTML 4 DTD の[[注釈]] (参考) には [Q[serialized applet file]] と書かれています。 ([[名無しさん]] [sage]) [[#comment]] ** 代替 [24] この属性は HTML 4 で要素型ごと'''非推奨'''とされています。 代わりに [CODE(HTMLe)[[[object]]]] 要素型と [CODE(HTMLa)[[[classid]]]] 属性を使うことができます。 [[#comment]] ** 属性値 [21] この属性の値は [CODE(SGML)[[[CDATA]]]] です。 資源 (ファイル) の名前を指定します。 大文字・小文字が区別されます。 [CODE(HTMLa)[[[codebase]]]] に対して相対と解釈されます。 [22] この属性は省略可能ですが、 その場合は [CODE(HTMLe)[[[code]]]] 属性が必須です。 [[#comment]] ** 他との関係 [23] [CODE(HTMLa)[[[code]]]] 属性と [CODE(HTMLa)[object]] 属性は一方が必須です。両方が指定されていて、 級名が一致しない場合は[[誤り]]です。 [SUP[ [HTML 4] ]] [[#comment]] ** メモ [20] 直列化データは applet の級名を含んでいますが、実装は含んでいません。 級名は級ファイルまたは書庫 ([CODE(HTMLa)[[[archive]]]]) から実装を取出すのに使います。 Applet が[Q[解直列化]]された時には、 [CODE(Java)[start()]] method は呼び出されますが、 [CODE(Java)[init()]] method は呼出されません。元の物体が直列化されたときの属性値は復元されません。 この [CODE(HTMLe)[applet]] 実現値に渡された任意の属性が applet に利用可能になります。 著者は、この機能を使うときには激しく慎重にするべきです。 Applet は直列化する前に止めるべきです。 [SUP[ [HTML 4] ]] [[#comment]] * メモ