[4] [[HTML]] の [DFN[[CODE(HTMLe)[object]] 要素型]]は、
HTML 文書に[RUBY[[[物体]]] [オブジェクト]]を埋込むための一般的な仕組みを提供しています。

* 代替

[225] 専用の[[要素]]が追加され[[プラグイン]]が衰退した現在、
[CODE(HTMLe)@en[[[object]]]] [[要素]]は徐々に使われなくなっています。

[230] それぞれ専用の[[要素]]の方が、用途に特化して使いやすく設計されています。

[FIG(switch)[
:[226] [[動画]]:
[CODE(HTMLe)@en[[[video]]]] [[要素]]を使うべきです。
:[227] [[音声]]:
[CODE(HTMLe)@en[[[audio]]]] [[要素]]を使うべきです。
:[228] [[画像]]:
[CODE(HTMLe)@en[[[img]]]] [[要素]]を使うべきです。
[[SVG]] は [CODE(XMLe)@en[[[svg]]]] [[要素]]で直接埋め込むか、
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
:[229] [[HTML文書]]の埋め込み ([[フレーム]]):
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
: [[Flash]] :
[[JavaScript]] を使うべきです。
: [[PDF]] :
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
: [[テキストファイル]] :
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
]FIG]

[264] 
[CODE(HTMLe)@en[object]] [[要素]]を使うこと自体に問題はありませんが、
そのメリットは特にありません。現在となっては[[相互運用性]]も代替手段の方が高くなっています。

* 仕様書

[REFS[
- [3] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#the-object-element>
]REFS]

* 意味

[182] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、
次のいずれかを[[表現][要素の意味]]します。

- [275] [[プラグイン]]
-- [CODE(HTMLa)@en[[[type]]]] [[属性]]により決まるもの
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
-- [CODE(HTMLa)@en[[[classid]]]] [[属性]]により決まるもの
- [276] [[子供閲覧文脈]]
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
- [277] [[画像]]
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
- [278] [[フォールバック内容]]
-- 他の条件に合致しない場合
-- [[実現値化]]するべき前提条件を満たさない場合
-- [[プラグイン]]がエラーを報告した場合
-- [[画像無効]]の場合
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]でまだ処理方法を決定できない状態
-- [[利用者]]が特に望んだ場合




*


[6]
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:[[属性]]:
,属性名	,属性値	,既定値	,説明	,状態	,出典
,[CODE(HTMLa)[[[accesskey]]]]	,	,	,	,非標準
,[CODE(HTMLa)[[[align]]]]	,	,	,揃え位置	,[HTML 4] 非推奨
,[CODE(HTMLa)@en[[[alt]]]]	,[CODE(SGML)@en[%[[Text]]]]	,(なし)	,[[代替文]]	,非標準
,[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)@en[[[content-length]]]],,,,[[W3C]] [[WD]],[[XHTML2]]
,[CODE(HTMLa)@en[[[copyright]]]]	,	,	,	,非標準,[[EMOBILE]]
,[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)@en[[[mediaout]]]],,[CODE(HTML)@en[[[no]]]],,非標準,[[EMOBILE]]
,[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(HTMLa)@en[[[private]]]],,[CODE(HTML)@en[[[no]]]],,非標準,[[EMOBILE]]
,[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)@en[[[viewastext]]]]	,([[真偽値属性]])	,([[偽]])	,	,非標準
,[CODE(HTMLa)@en[[[vjscodebase]]]]	,[CODE(SGML)@en[%[[URI]]]]	,(なし)	,	,非標準	,[[Visual J# .NET]]
,[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]]

* 内容

[218] [CODE(HTMLe)@en[[[object]]]] [[要素]]の[[内容]]は、
[[フォールバック内容]]として使われます。
これは指定された[[資源]]がエラーで表示できない時に使われるものです。
[[著者]]は [CODE(HTMLe)@en[[[object]]]] [[要素]]を入れ子にすることで、
異なる能力を持つ[[利用者エージェント]]にそれぞれ適切な[[資源]]を表示させることができます。
[SRC[>>17]]

;; [219] しかしこれは [[fingerprinting vector]] です。

[233] [[内容]]としては、[[フォールバック内容]]の前に任意の個数の
[CODE(HTMLe)@en[[[param]]]] [[要素]]を置くことができます。これは[[プラグイン]]の[[引数]]として使われます。

;; [CODE(HTMLe)@en[[[embed]]]] [[要素]]の[[プラグイン]]依存の[[属性]]に相当します。

[234] 仕様上は明確に禁止されているわけではありませんが、
[CODE(HTMLe)@en[[[object]]]] [[要素]]が[[プラグイン]]以外として使われる場合、
[CODE(HTMLe)@en[[[param]]]] [[要素]]は意味を持ちませんから、
[[著者]]は含めるべきではありません。

[242] 更に、各 [[Webブラウザー]]が [[Flash]] (と [[PDF]]) 以外の[[プラグイン]]への対応を打ち切ったことにより、
[CODE(HTMLe)@en[[[param]]]] [[要素]]も [[Flash]] 用のもの以外は意義を失いました。

* 文脈

[HISTORY[

[10] [CODE(HTMLe)[object]] は [CODE(SGML)[%[[inline]]]]
が使える場所だけでなく、 [CODE(HTMLe)[[[head]]]]
内に入れることもできます。
[SRC[HTML4]]

[291] 
この場合、 [[UA]] は普通 [CODE(HTMLe)[head]] をレンダリングしないので、
著者はレンダリングされ得るデータを指定しないように注意するべきです。 [HTML 4]

]HISTORY]

[292] [[フォント依存符号化]]のための利用:
[[PFR]],
[[PSCII]]

* レンダリング

[12] 
仕様書: [[HTML 4]] 13.3.1 Rules for rendering objects
<IW:HTML4:"struct/objects.html#idx-object-3">

[13] [[UA]] は、
= まず、 [CODE(HTMLe)[object]] をレンダリングしようと試みなければなりません。
-- [[内容]]をレンダリングするべきではありません。 
(ということはしても間違いではないのか。)
-- [CODE(HTMLe)[[[param]]]] や [CODE(HTMLe)[[[map]]]] が子供にいないか確認しないといけません。
= 何らかの理由 (しないように設定、資源不足、体系が間違いなど)
でレンダリングできないときには内容をレンダリングしようと試みなければなりません。

[[#comment]]


** フォーム制御子

[45]
[[Web Forms 2.0]] は [[HTML 4]] の [CODE(HTMLe)@en[[[object]]]]
as form control にまったく言及がないわけですが、
[[Web Forms 2.0]] は [[HTML 4]] の拡張であって置き換えではないので、
依然 [CODE(HTMLe)@en[[[object]]]] as form control 
も使えるのだそうな。

;; [CITE@en[[whatwg] WebForms 2.0 and object controls]]
<http://listserver.dreamhost.com/pipermail/whatwg-whatwg.org/2005-April/003596.html>

[46]
でも既存の[[フォーム制御子]]の一覧
<IW:WF2:"#existing">
にも[[フォーム制御子]]の定義
<IW:WF2:"#form-control">
にも [CODE(HTMLe)@en[[[object]]]] 
は言及されていない件。

[[#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] <IW:HTML4:"struct/objects.html#adef-coords">)。
詳しくは [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] ]]。
最低でも、無限循環に陥って利用者が手を出せなくなる事態は避けるべきでしょう。

* [CODE(DOMi)@en[HTMLObjectElement]] インターフェイス

[212] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、[[プラグイン]]を[[表現]]する場合で、
[[プラグイン]]がスクリプト可能インターフェイスを持つ場合は、
これを晒す[['''べきです''']] [SRC[>>17]]。

* 状態

[215] [[HTML要素]]としての状態、[[閲覧文脈包含子]]としての状態に加えて、次の [CODE(HTMLe)@en[[[object]]]]
[[要素]]固有の状態を持ちます。
[FIG(list members)[
:[[表現]]するもの:[[プラグイン]]か[[入れ子閲覧文脈]]か[[画像]]か[[フォールバック内容]]のいずれかです。
:[[プラグイン]]の[[実現値]]:[[プラグイン]]が[[実現値化]]されている場合、その[[実現値]]です。
]FIG]

* 処理

[18] 次の''いずれか''が発生した時、[[DOM操作タスク源]]の[[タスク]]を[[タスクキューに追加]]しなければなりません。[[キュー]]に[[タスク]]がある間および実行中には、
[[節点文書]]について [[delay the load event]] しなければ[['''なりません''']]。 [SRC[>>17]]
[FIG(list)[
- [19] [[要素]]が作成された時
- [20] [[要素]]が[[開いている要素のスタック]]から [[pop]] された時
- [21] [[要素]]が[[文書に挿入]]または[[文書から削除]]された時で、
[[開いている要素のスタック]]上には無い場合
- [22] [[節点文書]]が[[完全に活性]]かどうかが変わった時
- [23] [[祖先]]の [CODE(HTMLe)@en[[[object]]]] [[要素]]が[[フォールバック内容]]を表示するかしないか変化した時
- [24] [CODE(HTMLa)@en[[[classid]]]] [[属性]]が設定、変化、削除された時
- [32] [CODE(HTMLa)@en[[[classid]]]] [[属性]]が無い時で、
[CODE(HTMLa)@en[[[data]]]] [[属性]]が設定、変化、削除された時
- [37] [CODE(HTMLa)@en[[[classid]]]] [[属性]]も
[CODE(HTMLa)@en[[[data]]]] [[属性]]も無い時で、
[CODE(HTMLa)@en[[[type]]]] [[属性]]が設定、変化、削除された時
- [76] [[レンダリング中]]かどうかが変化した時
]FIG]

;; [80] [[祖先]]に[[媒体要素]]があるかどうかが変化した時は条件に入っていません。

[77] [[タスク]]は、[VAR[要素]]について次のようにしなければ[MUST[なりません']] [SRC[>>17]]。
[FIG(steps)[
= [78] 
[FIG(list)[
- [259] [[利用者]]が[[フォールバック内容]]を表示するべきと設定している時
(例えばその方がより[[アクセス可能]]となると[[利用者]]が判断する場合)
- [81] [[祖先]]に[[媒体要素]]がある場合
- [82] [[祖先]]に[[フォールバック内容]]を表示''しない'' [CODE(HTMLe)@en[[[object]]]]
[[要素]]がある場合
- [83] [[閲覧文脈]]を持つ[[文書中]]に''ない''場合
- [84] [[節点文書]]が[[完全に活性]]で''ない''場合
- [85] [[開いている要素のスタック]]上にある場合
- [86] [[レンダリング中]]で''ない''場合
- [260] [VAR[要素]]について
[[Should element be blocked ''a priori'' by Content Security Policy?]] が
[[Blocked]] を返す場合
]FIG]
... のいずれかの場合、
== [79] [[フォールバック内容]]としての処理を行います。
= [87] それ以外の場合で、
[CODE(HTMLa)@en[[[classid]]]] [[属性]]が[[空文字列]]以外の値を持つ場合、
== [186] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]による処理 (>>187) を行います。
= [90] それ以外の場合で、 [CODE(HTMLa)@en[[[data]]]] [[属性]]が[[空文字列]]以外の値を持つ場合は、
== [184] [CODE(HTMLa)@en[[[data]]]] [[属性値]]による処理 (>>185) を行います。
= [167] それ以外の場合で、
[CODE(HTMLa)@en[[[data]]]] [[属性]]がなく [CODE(HTMLa)@en[[[type]]]] [[属性]]がある場合、
== [169] [CODE(HTMLa)@en[[[type]]]] [[属性値]]による処理 (>>168) を行います。
= [172] それ以外の場合は、
== [173] [[フォールバック内容]]としての処理に移ります。
]FIG]

** fetch した資源の表示

[185] [CODE(HTMLa)@en[[[data]]]] [[属性値]]による処理は、次のようにしなければ[['''なりません''']]
[SRC[>>17]]。
[FIG(steps)[
= [91] 
[FIG(list)[
- [92] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、
- [93] [[利用者エージェント]]が対応しない型で、
- [94] 適当な[[プラグイン]]がなければ、
]FIG]
... ここで終わって[[フォールバック内容]]としての処理に移っても構いません。
= [95] [CODE(HTMLa)@en[[[data]]]] [[属性値]]の[[URLの解決]]を行います。
= [96] 失敗した場合は、
== [97] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[error]]]]
:[[対象]]:[[要素]]
]FIG]
== [98] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [99] 次のような新しい[[要求]]を [[fetch]] する[['''べきです''']]。
[FIG(list members)[
[FIGCAPTION[
[[要求]]
]FIGCAPTION]
:[[URL]]:得られた[[絶対URL]]
:[[クライアント]]:[[要素]]の[[節点文書]]の [CODE(DOMi)@en[[[Window]]]]
の[[環境設定群オブジェクト]]
:[F[終点]]: [[空文字列]]
:[[[CODE(HTTP)@en[Origin]]ヘッダー省略フラグ]]:[[要素]]が[[閲覧文脈適用範囲起源]]を持たなければ、設定する
:[[credentialsモード]]:[CODE[[[include]]]]
:[[URL credentials利用フラグ]]:設定する
]FIG]
= [102] [[fetch]] の結果が利用可能なら、 [[fetch]] 後の処理に移ります。ここで終わります。
= [103] そうでなければ、[[フォールバック内容]]としての処理に移ります。ここで終わります。
]FIG]

[100] [[fetch]] は、 [[fetch]] によって実行される[[タスク]]の完了まで、
[[節点文書]]を [[delay the load event]] しなければ[['''なりません''']] [SRC[>>17]]。

[101] [[fetch]] が [[AppCache]] を使う場合、本 [[fetch]]
は[[子供閲覧文脈]]のためのものとはみなしません [SRC[>>17]]。

[104] ([[キャッシュ]]されているなど [SRC[>>17]]) [[fetch]] 結果が直ちに利用可能なら、
そのまま[[同期的]]に次の処理が行われます。そうでなければ、
[[fetch]] によって実行される[[タスク]]で [[fetch]] 後の処理が行われます。
[[利用者エージェント]]は十分なデータを受信した時点で利用可能になったと判断できます [SRC[>>17]]。
その具体的なタイミングは規定されていません。

;; [105] この処理全体が[[タスク]]として元の操作に対して[[非同期的]]に実行されること、
[[ネットワーク]]が関わる処理であることから、 >>104 の動作タイミングの違いが[[著者]]にどこまで観測可能かは謎です。

;; [183] [[非同期的]]に処理される場合は、利用可能になるまでの間、一時的に[[フォールバック内容]]を[[表現]]する状態となります。

[106] [[fetch]] 後の処理は、次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [107] 失敗した ([CODE(HTTP)[[[404]]]] や[[ネットワークエラー]]などの) 場合には、
== [108] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[error]]]]
:[[対象]]:[[要素]]
]FIG]
=== [109] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [110] 型の決定 (>>111) を行います。
= [140] 決定した型に基づき処理します (>>139)。
]FIG]

*** 型の決定

[111] 型の決定は、次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [112] 
[FIG(list)[
- [113] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり
- [114] [CODE(HTMLa)@en[[[typemustmatch]]]] [[属性]]があり
- [115] [[資源]]が[[Content-Typeメタデータ]]を持ち
- [116] [CODE(HTMLa)@en[[[type]]]] [[属性値]]が[[ASCII大文字・小文字不区別]]で
[[Content-Typeメタデータ]]と一致する
]FIG]
... なら、その型を返して停止します。
= [117] [CODE(HTMLa)@en[[[typemustmatch]]]] [[属性]]があれば、
何も返さず停止します。
= [118] [[資源]]が[[Content-Typeメタデータ]]を持ち、
[[利用者エージェント]]が本[[資源]]に関して [CODE(HTTP)@en[[[Content-Type]]]]
に厳密に従うよう設定されている場合には、
その型を返して停止します。
(これは[[文書]]の[[Webサイト]]の意図と異なる[[プラグイン]]を埋め込まれた[[Webサイト]]が使おうとしているのですから、
[[脆弱性]]をもたらす危険性があります。)
= [119] 
[FIG(list)[
- [120] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、
- [121] [[利用者エージェント]]が対応する型ではなく、
- [122] [[プラグイン]]が対応する型なら、
]FIG]
... その型を返して停止します。
= [123] [[資源]]が [[Content-Typeメタデータ]]を持つ場合、
== [124] 
[FIG(list)[
- [125] [[Content-Typeメタデータ]]が [CODE(MIME)@en[[[text/plain]]]] で、
[[rules for text or binary]] が [CODE(MIME)@en[[[text/plain]]]]
以外を返す場合
- [126] [[Content-Typeメタデータ]]が [CODE(MIME)@en[[[application/octet-stream]]]] の場合
]FIG]
... のいずれかの場合には、
=== [130] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、値が
[CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
==== [129] それが[[プラグイン]]の対応する型か、
[CODE(MIME)@en[[[image/]]]] で始まる [[XML MIME型]]以外の型なら、
その型を返して停止します。
== [136] それ以外の場合には、
=== [128] [[Content-Typeメタデータ]]の型を返して停止します。
= [131] [[資源]]が [[Content-Typeメタデータ]]を持たない場合、
== [132] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、値が
[CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
その型を返して停止します。
== [133] [CODE(HTMLa)@en[[[type]]]] [[属性]]がなく、[[sniffed MIME type]]
が [CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
その型を返して停止します。
= [134] ([[リダイレクト]]後の) [[資源]]の [[URL]] を[[URLの構文解析]]して得られた
[[path]] が[[プラグイン]]の対応するパターンであれば、
その型を返して停止します。
= [135] 何も返しません。
]FIG]

;; [138] [[Content-Typeメタデータ]]における[[引数]]の扱いは不明瞭です。

;; [127] [CODE(MIME)@en[[[image/]]]] の比較は[[ASCII大文字・小文字不区別]]と思われます。

;; [137] [CODE(HTMLe)@en[[[embed]]]] 同様に[[拡張子]]が判定に使われますが、
優先度は低いようです。

*** 処理方法の決定

[139] 型を決定したら、[VAR[要素]]を次の通り処理しなければ[MUST[なりません]] [SRC[>>17]]。
[FIG(steps)[
= [141] 型が指定され、それが[[利用者エージェント]]の対応する型ではなく、
[[プラグイン]]が対応する型ではある場合、
== [202] [[fetch]] 結果による[[プラグイン]]の処理 (>>203) に移ります。ここで終わります。
= [146] それ以外で、型が [[XML MIME型]]の場合や、 [CODE(MIME)@en[[[image/]]]]
で始まらない場合は、
== [147] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] なら、
=== [148] [VAR[要素]]の[F[入れ子閲覧文脈]]を、[[閲覧文脈の作成]]の結果に設定します。
=== [149] [VAR[要素]]に [CODE(HTMLa)@en[name][閲覧文脈名]] [[属性]]があれば、
==== [155] [VAR[要素]]の[F[入れ子閲覧文脈]]の[F[閲覧文脈名]]を、
[VAR[要素]]の [CODE(HTMLa)@en[name][閲覧文脈名]] [[属性値]]に設定します。
== [152] [[資源]]の [[URL]] が [CODE(URI)@en[[[about:blank]]]] の場合、
=== [153] [[タスク]]を[[タスクキューに追加]]します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
== [150] [[資源]]の [[URL]] が [CODE(URI)@en[[[about:blank]]]] で''ない''場合、
=== [151] [[navigate]] します。
[FIG(list members)[
:[[資源]]:[[資源]]
:[[閲覧文脈]]:[[要素]]の[[入れ子閲覧文脈]]
:[[始点閲覧文脈]]:[[要素]]の[[節点文書]]の[[閲覧文脈]]
:[[置換有効]]:[[真]]
]FIG]
== [154] [[要素]]は、[[入れ子閲覧文脈]]を[[表現]]します。
= [156] それ以外で、型が [CODE(MIME)@en[[[image/]]]] で始まる場合で、
[[画像無効]]でない場合は、
== [252] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
=== [253] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
=== [254] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
== [157] [[image sniffing]] を行います。
== [158] エラーや未対応のため[[レンダリング]]できない場合は、
=== [159] [[フォールバック内容]]としての処理に移り、停止します。
== [160] それ以外なら、
=== [161] [[要素]]は[[画像]]を[[表現]]します。
= [162] それ以外なら、
== [255] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
=== [256] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
=== [257] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
== [163] [[フォールバック内容]]としての処理に移り、停止します。
= [164] [[要素]]の[[内容]]は、[[要素]]が[[表現]]するものの一部ではありません。
= [165] [[資源]]を[[完全に読み込んだ]]ら、[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [166] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
]FIG]

[201] [[入れ子閲覧文脈]]を[[表現]]する場合には、
[FIG(list)[
- [220] [[入れ子閲覧文脈]]の[[活性文書]]が [[ready for post-load tasks]]
でない場合
- [221] [[入れ子閲覧文脈]]の[[活性文書]]を [[delay the load event]]
するものがある時
- [222] [[入れ子閲覧文脈]]が [[delaying [CODE(DOMe)@en[load]] events mode]]
の時
]FIG]
... は、 [[delay the load event]] しなければ[['''なりません''']] [SRC[>>17]]。

;; [223] [[同じ起源]]かどうかの検査は行われないようです。

[214] [[資源]]を[[完全に読み込む]]とは、[[文書]]の [[completely loaded]]
フラグが設定されることを言うと思われます。

** プラグインの表示

[187] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]による処理は、
次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [88] 
[FIG(list)[
- [195] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]に適切な[[プラグイン]]がある場合で、
- [194] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合
]FIG]
... には、
== [189] その[[プラグイン]]を使う[['''べきです''']]。 [CODE(HTMLa)@en[[[data]]]]
[[属性]]があれば、値を[[プラグイン]]に引き渡す[['''べきです''']]。
== [190] [[プラグイン]]がエラーを報告した場合、
=== [193] [[フォールバック内容]]としての処理に移ります。
= [89] それ以外の場合には、
== [191] [[フォールバック内容]]としての処理に移ります。
]FIG]

;; [192] [CODE(DOMe)@en[[[load]]]] [[イベント]]は[[発火]]されないようです。

;; [199] [[プラグイン]]が [CODE(HTMLa)@en[[[data]]]] [[属性]]の [[URL]]
を [[fetch]] するかもしれませんが、 [[Webブラウザー]]自体は行いません。

[168] [CODE(HTMLa)@en[[[type]]]] [[属性値]]による処理は、
次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [188] 
[FIG(list)[
- [170] [CODE(HTMLa)@en[[[type]]]] [[属性値]]の型に適切な[[プラグイン]]があり、
- [171] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合
]FIG]
... には、
== [174] その[[プラグイン]]を使う[['''べきです''']]。
== [175] [[プラグイン]]がエラーを報告した場合、
=== [176] [[フォールバック内容]]としての処理に移ります。ここで終わります。
== [177] [[プラグイン]]の読み込みが完了したら、
[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [178] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
= [172] それ以外の場合は、
== [173] [[フォールバック内容]]としての処理に移ります。
]FIG]

;; [200] [CODE(HTMLa)@en[[[data]]]] [[属性]]が指定されている時には本処理は呼び出されません。

[203] [[fetch]] 結果による[[プラグイン]]の処理は、次のようにしなければ[['''なりません''']]
[SRC[>>17]]。
[FIG(steps)[
= [246] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
== [250] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
== [251] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
= [204] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合には、
== [145] 型に対応した[[プラグイン]]を使う[['''べきです''']]。
[[資源]]をその[[プラグイン]]に引き渡す[['''べきです''']]。
== [197] [[プラグイン]]がエラーを報告したら、
=== [198] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [205] それ以外の場合には、
== [143] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [142] [[要素]]の[[内容]]は、[[要素]]が[[表現]]するものの一部ではありません。
= [144] [[資源]]が完全に読み込まれたら、[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [206] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
]FIG]

[207] [[プラグイン]]の[[実現値化]]の際には、次の名前と値の組の[[リスト]]を[[プラグイン]]に渡す[['''べき''']]です [SRC[>>17]]。
[FIG(list)[
= [208] [[属性]]の名前と値。追加順/ソース順。
= [209] 名前 [CODE[[[PARAM]]]], 値 [[null]]。
= [210] [[子要素]] [CODE(HTMLe)@en[[[param]]]] による[[引数]]の名前と値。[[木順]]。
]FIG]

;; [213] [CODE(HTMLe)@en[[[embed]]]] [[要素]]では[[null名前空間]]の[[属性]]に限定されていますが、
こちらではなぜか限定されていません。

[211] [[要素]]は、[[プラグイン]]を[[表現]]します [SRC[>>17]]。

[216] [[プラグインの砂箱化]]を行う場合で[[保安プラグイン]]化できない場合に、
[CODE(HTMLe)@en[[[embed]]]] [[要素]]では[[利用者]]がそれでも[[実現値化]]することを選択できるとされていますが、
[CODE(HTMLe)@en[[[object]]]] [[要素]]ではそのような規定がありません。

** フォールバック内容の表示

[179] [[フォールバック内容]]として処理する場合、[[要素]]は
[CODE(HTMLe)@en[[[object]]]] [[要素]]の[[子供]]を[[表現]]します。
ただし先頭の [CODE(HTMLe)@en[[[param]]]] [[要素]]は (あれば) 無視します。 [SRC[>>17]]

[180] その場合、[[実現値化]]された[[プラグイン]]があれば、 [[unload]]
しなければ[['''なりません''']] [SRC[>>17]]。

;; [181] [[入れ子閲覧文脈]]は破棄しないようです。

** 伝播

[196] 次の処理は、 [CODE(HTMLe)@en[[[object]]]] [[要素]]が[[フォールバック内容]]を[[表現]]するかどうかに影響されます。
[CODE(HTMLe)@en[[[object]]]] [[要素]]が[[表現]]するものが変化した場合は、
次の処理も行う必要があります。
[FIG(list)[
- [[子孫]] [CODE(HTMLe)@en[[[embed]]]] [[要素]]
- [[子孫]] [CODE(HTMLe)@en[[[object]]]] [[要素]]
- [[子孫]] [CODE(HTMLe)@en[[[applet]]]] [[要素]]
]FIG]

* [CODE(DOMi)@en[HTMLObjectElement]] インターフェイス

[243] [CODE(HTMLe)@en[object]] [[要素]]の[[要素インターフェイス]]は、
[CODE(DOMi)@en[HTMLObjectElement]] [[インターフェイス]]です。

[244] [CODE(DOMi)@en[HTMLObjectElement]] [[インターフェイス]]には、
次のメンバーがあります。
[FIG(list short)[
- [CODE(DOMa)@en[contentDocument]]
- [CODE(DOMa)@en[contentWindow]]
]FIG]

* 安全性

[34] [CODE(HTMLe)[[[img]]]] 要素型の安全性の項もご覧下さい。

[36]
[CITE[スラッシュドット ジャパン | IEのobjectタグにクラッシュや任意コード実行可能な脆弱性]] <http://slashdot.jp/security/05/07/01/2355213.shtml?topic=41>
([[名無しさん]] [WEAK[2005-07-07 14:21:21 +00:00]])

* 歴史

** HTML3

[SEE[ [[HTML 2.1E]] ]]

** IE3

[282] 
[CITE@EN-US[OBJECT Element | OBJECT Object]], [[InetSDK]], [TIME[2024-08-17T04:09:49.000Z]], [TIME[2000-10-25T13:14:00.054Z]] <https://web.archive.org/web/20001025122337/http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/OBJECT.asp>

[286] 
[CITE@EN-US[Tips and Tricks]], [[InetSDK]], [TIME[2024-08-17T06:05:29.000Z]], [TIME[2000-10-19T16:44:46.820Z]] <https://web.archive.org/web/20001019164042/http://msdn.microsoft.com/workshop/author/dhtml/reference/tips/tips.asp#Using_Objects>



[FIG(data)[ [287] [[HTML要素概説]]

:[F[要素名]]:[CODE[object]]
:日付:[TIME[1996]]
:説明:
[TIME[1996]]頃、
[[Internet Explorer 3.0]]
が
[CODE[object]]
を実装した。
[[ActiveXコントロール]]を埋め込むことができた。
これ以後、
[[Internet Explorer]] 用の [CODE[object]] と
[[Netscape Navigator]] 用の [CODE[embed]]
を組み合わせて[[プラグイン]]を利用する方法が一般的となって広く使われた。
:参照:[CODE[img]]
:参照:[CODE[applet]]
:参照:[CODE[embed]]
:参照:[CODE[iframe]]

]FIG]



** HTML4



[235] [[HTML4]] では、任意の[[オブジェクト]]の埋め込みの方法として
[CODE(HTMLe)@en[[[object]]]] [[要素]]が定義されていました。

[236] どんなものにも使えることになっていましたが、規定されていたのはそれだけで、
詳細は実装に委ねられていました。汎用性が高いといえば聞こえはいいですが、
標準化を放棄したというのが正確なところでした。

[237] [[HTML4]] の開発初期には [CODE(HTMLe)@en[[[img]]]] [[要素]]を[[廃止]]または[[非推奨]]として
[CODE(HTMLe)@en[[[object]]]] [[要素]]に統合することが検討されていたそうです。
過激な[[著者]]の中にはそれに従って [CODE(HTMLe)@en[[[img]]]]
[[要素]]を [CODE(HTMLe)@en[[[object]]]] [[要素]]に置き換えている人もいましたが、
当時はそれを正しく表示させられる[[Webブラウザー]]などありませんでした。

[238] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、 [[HTML4]] の規定はともかく、
実際上は [[IE]] で [[ActiveX control]] を表示するための[[要素]]としてしか使えませんでした。

[5] 仕様書:
- [[HTML 4]]
-- 13.1 Introduction to objects, images, and applets
<IW:HTML4:"struct/objects.html#h-13.1">
-- 13.3 Generic inclusion: the [CODE(HTMLe)[OBJECT]] element
<IW:HTML4:"objects.html#edef-OBJECT">
-- 13.5 Notes on embedded documents
<IW:HTML4:"struct/objects.html#embedded-documents">

[9] 多くの [[WWWブラウザ]]は自前で HTML や画像などを解釈することができますし、
そうでない形式では他のプログラムを起動して処理させるなどすることができます。
[CODE(HTMLe)[object]] 
を使うと外部のプログラムを起動するか著者の指定したプログラムを使うか、
といったようなことを記述できます。 [HTML 4]

ほとんどの場合著者は次の3種類の情報を指定する必要があります。
常に3種類とも必要ではなく、場合によっていろいろです。 [HTML 4]

- 取込む物体の実装。例えば、時計アプレットであればアプレットの実行可能符号の場所。
- レンダリングするデータ。例えば、フォント・データをレンダリングするプログラムなら、
フォント・データの場所。
- 実行時の追加の引数。例えば、アプレットの初期値。

前2者は属性、引数は子 [CODE(HTMLe)[[[param]]]] 要素を使います。


[280] 
[CITE[Plug-in Basics]], [[Sharon Williams]], [TIME[2024-08-16T09:05:38.000Z]], [TIME[2000-12-17T12:16:24.758Z]] <https://web.archive.org/web/20001217121500/http://developer.netscape.com/docs/manuals/communicator/plugin/pg1bas.htm>

[281] 
[CITE[HTML Tag Reference]], [TIME[2024-08-16T12:29:24.000Z]], [TIME[2001-06-08T08:41:06.767Z]] <http://web.archive.org/web/20010608083811/http://developer.netscape.com/docs/manuals/htmlguid/tags14.htm#tags%3AOBJECT>

[272] [CITE[XFA-Template]], [TIME[2021-04-21T03:29:56.000Z]] <https://www.w3.org/1999/05/XFA/xfa-template-19990614#element-spec-exobject>

[279] [[CEA-2014-B]]

** 要素の内容

[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])

[39]
'''なぜ行内要素の[CODE(HTMLe)@en[object]]の内容が[CODE(SGML)@en[%[[flow]];]]なのか'''

どうして[[HTML 4]]で[[行内要素]]である[CODE(HTMLe)@en[[[object]]]]の[[内容]]として[[ブロック水準要素]]が認められているのでしょうか?

仕様書案をたどってみると、最初のまだ[[要素型名]]が[CODE(HTMLe)@en[[[insert]]]]であった頃から、[[内容モデル]]は実質的に変わっていないことがわかります。
[[HTML]]は歴史的に[[ブロック水準要素]]なしに[[行内要素]]や[[文字データ]]が現れることを許容してきましたから、
はじめのうちは不自然なことではありませんでした。

しかし、[[HTML 4]]案の途中から[[移行用DTD]]と[[厳密DTD]]の区別が導入されて、[[厳密DTD]]では[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]として[[行内要素]]を置くことができなくなりました。
[CODE(HTMLe)@en[[[object]]]]は[[行内要素]]に分類されたので、
[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]にはなれず、
[[ブロック水準要素]]を介した[[孫]]以下としなければならなくなりました。ところが、
[WEAK[([CODE(HTMLe)@en[[[blockquote]]]]とは違って)]]
[CODE(HTMLe)@en[[[object]]]]の[[内容モデル]]は変更されませんでした。

;; 
ちなみに、[[HTML 2.0]]では[CODE(SGML)@en[%[[HTML.Recommended]];]]な時でも[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]になり得る[[要素型]]に[CODE(HTMLe)@en[[[img]]]]も含まれていました。

[217] 歴史的変遷: <http://suika.suikawiki.org/www/2004/html/classes>

[283] 
[CITE[XML in HTML Meeting Report]], [TIME[2017-10-02T11:00:11.000Z]], [TIME[2024-08-17T05:10:51.502Z]] <https://www.w3.org/TR/NOTE-xh#script-hack>


[284] 
[CITE@EN-US[Binding the XML Data Source Object to Data]], [[Microsoft Corporation]], [TIME[2024-08-17T05:48:43.000Z]], [TIME[2000-10-27T13:11:53.955Z]] <https://web.archive.org/web/20001027130748/http://msdn.microsoft.com/xml/XMLGuide/xmldso.asp>

[285] >>284 [[IE5]] では [CODE[object]] 内に任意の [[XML]] を書く場合があった。



[FIG(data)[ [289] [[HTML要素概説]]

:[F[要素名]]:[CODE[*]]
:日付:[TIME[1998]]
:説明:
[[Internet Explorer 5]]
では
[CODE[object]]
の[[内容]]に任意の
[[XML]]
が書ける (ことがある?) とされた。
[SEE[>>290]]
:出典:
[REFS[

-
[DFN[MSDN:XMLDSO]]:
[CITE@EN-US[Binding the XML Data Source Object to Data]], 
[DATA(.author)[[[Microsoft Corporation]]]], 
[TIME[2024-08-17T05:48:43.000Z]], [TIME(.published)[2000-10-27T13:11:53.955Z]] <https://web.archive.org/web/20001027130748/http://msdn.microsoft.com/xml/XMLGuide/xmldso.asp>

]REFS]
:注釈:
-
[290] 
本書ではそのような形の [[XML]] の[[要素]]は採録対象外とした。

]FIG]

** XHTML2 と画像の埋め込み

[63] 遅れてきた春、 [[XHTML2]] の最初の[[作業原案]]では [CODE(HTMLe)@en[[[object]]]]
[[要素]]が[[画像]]の埋め込みに使える唯一の[[要素]]でした。

;; [CITE@en[- XHTML Object Module]] ([TIME[2002-08-06 00:20:43 +09:00]] 版) <http://www.w3.org/TR/2002/WD-xhtml2-20020805/mod-object.html>

[64] しかしそれもつかの間、すべての[[要素]]に [CODE(HTMLa)@en[[[src]]]]
[[属性]]が追加され、更になぜか [CODE(HTMLe)@en[[[img]]]] [[要素]]まで復活しました。

** 不思議解釈

[1] [[[CODE(HTMLe)[object]] hack]]

[2] ''(・▽・)えすともほめぱげ(・▽・)(2004-02-10)'' <http://plum.sakura.ne.jp/~s-tomo/tdiary/?date=20040210#p01>: 
一見標準の皮をかぶった [CODE(HTMLe)[object]] 要素。だけどそれは腐った WinIE 対策で、
本命はその中の [CODE(HTMLe)[[[embed]]]] 要素が本命・・・という話。 
(そんなときは [[W3C]] の XHTML 1.0 Transitional + embed DTD を使おう! 
[CODE(WikiPage)[[[embed]]]] 参照。)

[40]
[[RDF/XML]]を[[HTML]]に埋め込むために[CODE(HTMLe)@en[[[object]]]]を使えばよいとの意見もありますが、
[[[CODE(HTMLe)@en[object]] hack]]同様に濫用であって望ましくないです。

** <OBJECT> 宣言 (ASP)

[50]
[CITE[Global.asa ??????]] ([CODE[2007-02-18 11:36:39 +09:00]] 版) <http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpiis/iishelp/iis/htm/asp/glob822b.asp>

[38] >>50 より:
> <OBJECT> 宣言
>
拡張 <OBJECT> タグを使用して、セッション スコープまたはアプリケーション スコープを持つオブジェクトを Global.asa ファイルに作成できます。このタグは独立していて、すべての <SCRIPT> タグの外側にあります。
>
Global.asa ファイルで宣言されたオブジェクトは、そのオブジェクトを呼び出すスクリプトをサーバーが処理するまで作成されません。必要なオブジェクトだけしか作成されないため、リソースの節約になります。
>
構文
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"|CLASSID="ClassID"}>
. . .
</OBJECT>
]PRE]
>
パラメータ
>
:Scope:    オブジェクトのスコープを指定します。Global.asa ファイルで、Scope は「Session」または「Application」に設定されます。
:Identifier:    オブジェクト インスタンスの名前を指定します。
:progID:    クラス識別子に関連付けられた識別子です。<OBJECT> タグには ProgID または ClassID を指定する必要があります。ProgID の形式は [Vendor.]Component[.Version] です。
:ClassID:    COM クラス オブジェクトに対して一意の識別子を指定します。<OBJECT> タグには ProgID または ClassID を指定する必要があります。
>
例
>
以下の例のうち、最初の例では ProgID パラメータを使用して、セッション スコープの MyConnection というオブジェクトを作成します。2 番目の例では、ClassID を使用します。
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection
PROGID="ADODB.Connection">
REM Object Script
</OBJECT>
]PRE]
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection
CLASSID="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
REM Object Script
</OBJECT>
]PRE] 
>
解説
>
Global.asa で宣言されたオブジェクトは、アプリケーションの任意のスクリプトで使用できます。たとえば、次のオブジェクトを宣言したとします。
>
[PRE(example code)[
---GLOBAL.ASA---
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator">
</OBJECT>
]PRE] 
>
この場合、MyAd オブジェクトはアプリケーションの任意のページから参照できます。
>
[PRE(example code)[
---SOME.ASP---
<%= MyAd.GetAdvertisement("/ads/adrot.txt") %>
]PRE]

** ガラケー

[239] [[ガラケー]]では、[[動画]]、[[音声]]、[[Javaアプレット]]、
その他[[ガラケー]]特有の機能を [[Webページ]]に埋め込むための方法として
[CODE(HTMLe)@en[[[object]]]] [[要素]]を使っていました。

;; [240] [[デスクトップブラウザー]]が実装しなかった
[CODE(HTMLa)@en[[[declare]]]] [[属性]]を使った機能もありました。

[241] こうした利用方法は [[HTML4]] の理論上の仕様とは一応整合するものでしたが、
[[IE]] の [[ActiveX control]] としての利用や他の[[Webブラウザー]]の [[NPAPI]]
[[プラグイン]]の利用とは互換性のない、完全に独自の利用方法でした。
埋め込まれているデータ形式も、[[ガラケー]]向けの独特の形式や[[プロファイル]]でした。
ですから、[[デスクトップブラウザー]]との互換性はまったくありませんでした。

** [CODE[OBJECT]] 要素 (DjVu XML)

[273] 
[[DjVu XML]]
には
[[HTML]]
の
[CODE[object]]
[[要素]]から派生した
[DFN[[CODE[OBJECT]]]]
[[要素]]がありました。



* 例

[16] 時計アプレットの例
[PRE(HTML)[
<P><OBJECT classid="http://www.miamachina.it/analogclock.py">
An animated clock.
</OBJECT>
]PRE]

[WEAK[(HTML 4 仕様書より)]]

レンダリングできないときには代替文 [Q[An animated clock.]]
がレンダリングされます。

この場合 UA が解釈したらすぐに時計がレンダリングされますが、
先に宣言だけしておいてレンダリングを遅延させることができます。 [HTML 4]

[17] 色々な形式の例
[PRE(HTML)[
<P>                 <!-- 最初に Python アプレットを試す -->
<OBJECT title="宇宙から見た地球" 
        classid="http://www.observer.mars.example/TheEarth.py">
                    <!-- 駄目なら MPEG 動画を試す -->
  <OBJECT data="TheEarth.mpeg" type="application/mpeg">
                    <!-- 駄目なら PNG 静止画像を試す -->
    <OBJECT data="TheEarth.png" type="image/png">
                    <!-- 駄目なら文字列を表示 -->
      宇宙から見た<STRONG>地球</STRONG>。
    </OBJECT>
  </OBJECT>
</OBJECT>
]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">
</[CODE(HTMLe)[object]]>
</[CODE(HTMLe)[a]]></[CODE(HTMLe)[p]]>
]PRE]

出典:
[CITE[Portable Network Graphics (PNG) Specification (Second Edition)]] 
<http://www.w3.org/TR/2003/REC-PNG-20031110/#figure41>

[28] HTML 文書を埋込む例
[PRE(HTML)[
...text before...
<OBJECT data="embed_me.html" type="text/html">
It is described in
<A href="embed_me.html" type="text/html">another document</A>.
</OBJECT>
...text after...
]PRE]

[WEAK[(HTML 4 仕様書より、改)]]

[51]
[CITE[ObjectTestResults - ESW Wiki]] ([CODE[2007-03-10 12:09:38 +09:00]] 版) <http://esw.w3.org/topic/ObjectTestResults>
([[名無しさん]])

[55]
[CITE@en[Object Tests - The Web Standards Project]] ([CODE[2007-03-21 13:55:52 +09:00]] 版) <http://www.webstandards.org/learn/articles/askw3c/may2005/object-tests/>
([[名無しさん]])

[[#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]])

[35]
- [[WebCGM]]
-- 第1版: [CITE[WebCGM Intelligent Content]] 
<http://www.w3.org/TR/1999/REC-WebCGM-19990121/REC-03-CGM-IC#webcgm_3_4>
-- 第2版: [CITE[WebCGM Intelligent Content]] 
<http://www.w3.org/TR/2001/REC-WebCGM-20011217/REC-03-CGM-IC.html#webcgm_3_4>

[41]
[CITE[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] <http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/WebCGM20-IC.html#webcgm_3_4>
([[名無しさん]] [sage])

[42]
[CITE[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] <http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/WebCGM20-IC.html#webcgm_3_4>
([[名無しさん]] [sage])

[43]
[CITE[A List Apart: Articles: Bye Bye Embed]] <http://www.alistapart.com/articles/byebyeembed>
([[名無しさん]] [WEAK[2006-07-15 11:35:43 +00:00]])

[44]
[CITE[Bug 335567 - Alternate Content To OBJECT should not participate in HTTP POST]] <https://bugzilla.mozilla.org/show_bug.cgi?id=335567>
([[名無しさん]] [WEAK[2006-08-16 15:04:16 +00:00]])

[47]
[CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([CODE[2007-01-25 02:12:49 +09:00]] 版) <http://www.w3.org/TR/2007/REC-webcgm20-20070130/WebCGM20-IC.html#webcgm_3_4>
([[名無しさん]] [WEAK[2007-02-02 14:26:18 +00:00]])

[48]
[CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([CODE[2006-11-04 01:53:46 +09:00]] 版) <http://docs.oasis-open.org/webcgm/v2.0/OS/WebCGM20-IC.html#webcgm_3_4>
([[名無しさん]])

[49]
[CITE[XHTML Quicktime Object]] ([CODE[2004-07-26 22:28:44 +09:00]] 版) <http://realdev1.realise.com/rossa/rendertest/quicktime.html>
([[名無しさん]] [WEAK[2007-02-14 10:12:18 +00:00]])

[52]
[CITE[Chapter 2]] ([CODE[1998-05-20 00:22:16 +09:00]] 版) <http://www.w3.org/People/Raggett/book4/ch02.html>
([[名無しさん]])

[53]
[CITE@en[Adding Multimedia in Web Documents (part 1) - The Web Standards Project]] ([CODE[2007-03-21 13:51:58 +09:00]] 版) <http://www.webstandards.org/learn/articles/askw3c/jun2004/>
([[名無しさん]])

[54]
[CITE@en[Adding Multimedia in Web Documents (part 2) - The Web Standards Project]] ([CODE[2007-03-21 13:55:31 +09:00]] 版) <http://www.webstandards.org/learn/articles/askw3c/may2005/>
([[名無しさん]])

[56]
[CITE[A Sample Chapter From HTML 4.01 Programmer's Reference by Wrox Publication]] ([CODE[2007-03-21 13:59:06 +09:00]] 版) <http://www.devasp.com/samplechapters/html401/chapter10.asp>
([[名無しさん]])

[57]
[CITE[A Sample Chapter From HTML 4.01 Programmer's Reference by Wrox Publication]] ([CODE[2007-03-21 14:05:19 +09:00]] 版) <http://www.devasp.com/samplechapters/html401/Chapter10_2.asp>
([[名無しさん]])

[58]
[CITE[A Sample Chapter From HTML 4.01 Programmer's Reference by Wrox Publication]] ([CODE[2007-03-21 14:07:53 +09:00]] 版) <http://www.devasp.com/samplechapters/html401/Chapter10_3.asp>
([[名無しさん]])

[59]
[CITE[A Sample Chapter From HTML 4.01 Programmer's Reference by Wrox Publication]] ([CODE[2007-03-21 14:11:03 +09:00]] 版) <http://www.devasp.com/samplechapters/html401/Chapter10_4.asp>
([[名無しさん]])

[60]
[CITE@en[Re: Eolas vs. <object>]] ([[Karl Dubost]] 著, [CODE[2007-04-18 08:28:14 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007Apr/1086.html>
([[名無しさん]])

- [61]
[CITE[<object> element feedback]] ([[Ian Hickson <ian@...>]] 著, [CODE[2008-05-06 06:08:15 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/14002>
([[名無しさん]])
-- [288] 
[CITE['''['''whatwg''']''' <object> element feedback]], [TIME[2024-08-20T17:41:29.000Z]], [TIME[2024-09-02T13:40:35.757Z]] <https://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-May/014685.html>



[62]
[CITE@en[Re: <object> content-type sniffing (detailed review of Semantics)]] ([[Ian Hickson]] 著, [TIME[2008-07-25 07:33:05 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2008Jul/0326.html>

[65] [CITE['''['''whatwg''']''' <object> behavior]]
([TIME[2009-09-14 16:29:33 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-September/022563.html>

[66] [CITE[IRC logs: freenode / #whatwg / 20100208]]
([TIME[2010-02-09 23:21:41 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100208#l-243>

[67] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-04-08 23:59:45 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4984&to=4985>

[68] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-04-10 00:35:09 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4989&to=4990>

[69] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-04-10 00:35:17 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4990&to=4991>

[70] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-08-08 13:09:14 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4783&to=4784>

[71] [CITE@en[Web Applications 1.0 r6915     Define the legacycaller behaviour of <embed> and <object>.]]
( ([TIME[2012-01-26 07:49:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6914&to=6915>

[72] [CITE@en[Web Applications 1.0 r7269 typo (also, since I went and looked up this decision to see if it made any sense -- it doesn't -- I had the URL handy, so I included it)]]
( ([TIME[2012-08-25 04:51:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7268&to=7269>

[73] [CITE@en[Working Group Decision on ISSUE-158: object-content-model]]
( ([[Sam Ruby]] 著, [TIME[2012-08-01 03:52:50 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-html/2012Jul/0250.html>

[74] [CITE@en[Web Applications 1.0 r8377     Clean up how <object> fires load events. (This is not complete. See bug 24214 for more that needs doing here.)]]
( ([TIME[2014-01-07 08:06:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8376&to=8377>

[75] [CITE@en[<object> attributes (Was: Versioning and html''''''[''''''5'''''']'''''')]]
( ([[Ian Hickson]] 著, [TIME[2007-04-13 05:23:08 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-html/2007Apr/0632.html>

[224] [CITE@en[Integrate Fetch into HTML · whatwg/html@7c5555a]]
([TIME[2015-09-18 19:02:41 +09:00]] 版)
<https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>

[231] [CITE@en[URLs are parsed and produce records · whatwg/html@30bc255]]
([TIME[2016-02-14 23:02:12 +09:00]] 版)
<https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>

[232] [CITE@en[Apply tag attributes in Adobe Flash Professional]]
([TIME[2016-02-20 16:32:16 +09:00]] 版)
<https://helpx.adobe.com/flash/kb/flash-object-embed-tag-attributes.html>

[FIG(quote)[
[FIGCAPTION[
[245] [CITE[Acceptヘッダで判別するサーバーサイドのSVGフォールバック - 聴く耳を持たない(片方しか)]]
([TIME[2016-02-24 18:25:24 +09:00]] 版)
<http://d.hatena.ne.jp/rikuo/20151017>
]FIGCAPTION]

> object要素	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
> Chromeでは、object要素のtype属性によってAcceptヘッダは変わりますが、ここではimage/svg+xmlを指定した際の値を記載。

]FIG]


[247] [CITE@en[Align Fetch's destination concept with changes in Fetch]]
([[sideshowbarker]]著, [TIME[2016-07-05 02:46:14 +09:00]])
<https://github.com/whatwg/html/commit/5e8f96a85d182d36c177db0d6fdde58b4ded86d4>

[248] [CITE@ja[マルチメディアファイルを XHTML 文書に埋め込む @ ぽかぽかWeb研究室]]
([TIME[2016-07-20 14:39:54 +09:00]])
<http://yupotan.sppd.ne.jp/web/xhtml-multimedia.html>

[249] [CITE@en[Be more precise about nested and discarded browsing contexts]]
([[domenic]]著, [TIME[2016-07-20 22:58:49 +09:00]])
<https://github.com/whatwg/html/commit/39118df640ad4a3f03f164fb5ffe0a56316297be>

[258] [CITE@en[Upstream the 'plugin-types' hooks from CSP3]]
([[mikewest]]著, [TIME[2016-08-02 11:07:32 +09:00]])
<https://github.com/whatwg/html/commit/5bafd7ed8955f27bb1ce7e68ceb22878c79a4c62>

[261] [CITE@en[Drop the name propagation for the object element's name attribute]]
([[foolip]]著, [TIME[2016-08-13 00:44:21 +09:00]])
<https://github.com/whatwg/html/commit/1d196b35eba203d5f7561c6b2458b990ff0e28fb>

[FIG(quote)[
[FIGCAPTION[
[262] [CITE@en[How to: Add Silverlight to a Web Page by Using HTML]]
([TIME[2016-09-01 16:09:43 +09:00]])
<https://msdn.microsoft.com/en-us/library/cc189089(v=vs.95).aspx>
]FIGCAPTION]

> <object width="300" height="300"
>     data="data:application/x-silverlight-2," 
>     type="application/x-silverlight-2" >
>     <param name="source" value="SilverlightApplication1.xap"/>
> </object>

]FIG]


[263] [CITE@en[Remove legacycaller from <object> and <embed>]]
([[zcorpan]]著, [TIME[2016-10-26 21:40:28 +09:00]])
<https://github.com/whatwg/html/commit/aaf2435a8cbaf7fa4e791bf86874854bb1b618af>

[265] [CITE@en[Remove <applet>]]
([[zcorpan]]著, [TIME[2017-08-21 22:19:30 +09:00]])
<https://github.com/whatwg/html/commit/b9b9d60f9451c05f8e8d542e4094f987ae1a5fb8>

[266] [CITE@en[`<object>` without "data" attribute probably needs to consider params to figure out its URL · Issue #387 · whatwg/html]]
([TIME[2017-08-26 00:17:03 +09:00]])
<https://github.com/whatwg/html/issues/387>

[267] [CITE@en[Further tabIndex getter tweaks]]
([[domenic]]著, [TIME[2019-07-10 03:43:46 +09:00]])
<https://github.com/whatwg/html/commit/7ce0b474147ac0574eb3e739f1a9c27e49a249ad>

[268] [CITE@en[Further tabIndex getter tweaks by domenic · Pull Request #4759 · whatwg/html · GitHub]]
([TIME[2020-07-13 12:30:47 +09:00]])
<https://github.com/whatwg/html/pull/4759>

[269] [CITE@ja[コンテンツの配信と再生 | サービス・機能 | NTTドコモ]]
([TIME[2020-12-27T09:36:13.000Z]])
<https://www.nttdocomo.co.jp/service/developer/make/content/flash/usage/index.html>

[270] [CITE@ja[再生制限 | サービス・機能 | NTTドコモ]]
([TIME[2020-12-29T11:41:44.000Z]])
<https://www.nttdocomo.co.jp/service/developer/make/content/imotion/mp4/feature/contents_protection/play_restriction/index.html>

[271] [CITE@ja[コンテンツ配信 | サービス・機能 | NTTドコモ]]
([TIME[2020-12-29T11:44:24.000Z]])
<https://www.nttdocomo.co.jp/service/developer/make/content/imotion/mp4/distribution/index.html>

[274] [CITE@en[Editorial: nested browsing context is a member, not a type]]
([[annevk]], [TIME[2019-11-27 02:46:03 +09:00]], [TIME[2022-01-18T08:59:11.000Z]])
<https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4>