object 要素
4.8.4 object 要素
Status: Last call for comments
- カテゴリー
- フロー・コンテンツ
- フレージング・コンテンツ
- エンベッディッド・コンテンツ
usemap属性を持つ場合:インタラクティブ・コンテンツ- リストされ、サブミット可能なフォーム関連要素
- この要素を使うことができるコンテキスト:
- エンベッディッド・コンテンツが期待される場所
- コンテンツモデル:
- 0 個以上の
param要素。その次にトランスペアレント - コンテンツ属性:
- グローバル属性
datatypenameusemapformwidthheight- DOMインタフェース:
-
interface HTMLObjectElement : HTMLElement { attribute DOMString data; attribute DOMString type; attribute DOMString name; attribute DOMString useMap; readonly attribute HTMLFormElement form; attribute DOMString width; attribute DOMString height; readonly attribute Document contentDocument; readonly attribute WindowProxy contentWindow; readonly attribute boolean willValidate; readonly attribute ValidityState validity; readonly attribute DOMString validationMessage; boolean checkValidity(); void setCustomValidity(in DOMString error); };
object要素によってインスタンスが生成されたコンテンツのタイプによって、そのノードは他のインタフェースをサポートするかもしれません。
object 要素は、外部のリソースを表すことができ、そのリソースのタイプによって、画像や、ネストしたブラウジング・コンテキストや、プラグインによって処理される外部リソース、のいずれかとして扱われます。
data 属性が存在すれば、それは、そのリソースのアドレスを指定します。指定する場合、この属性は妥当な URL でなければいけません。
type 属性が存在すれば、それは、そのリソースのタイプを指定します。指定する場合、この属性は妥当な MIME タイプでなければいけません。
data と type 属性の少なくとも一方は存在しなければいけません。
name 属性が存在すれば、それは妥当なブラウジング・コンテキスト名でなければいけません。指定の値は、適切であれば、ネストされたブラウジング・コンテキストの名前に使われます。
この要素が生成され、HTML パーサーや XML パーサーの開いた要素のスタックから取り出される場合において、それに続いて、この要素がドキュメントに挿入されたり、ドキュメントから削除されるとき、そして、この要素の Document が完全にアクティブかどうかが変わるとき、そして、祖先の object 要素がそのフォールバック・コンテンツの表示・非表示が変わるとき、そして、この要素の classid 属性がセット、変更、削除されるとき、そして、classid 属性が存在しない場合に data 属性がセット、変更、削除されるとき、そして、classid 属性も data 属性も存在しない場合に type 属性がセット、変更、削除されるとき:ユーザーエージェントは、その object 要素が何を表すのかを(再)決定するために次の手順を実行するタスクをキューイングしなければいけません。このタスクに対するタスク・ソースは、DOM マニュピュレーション・タスク・ソースです。
-
objectの通常のビヘイビアの代わりに、その要素のフォールバック・コンテンツを表示するようユーザーが設定していたら、この手順全体における最後の手順にジャンプします(フォールバック)。例えば、ユーザーによっては、よりアクセシブルだと思うフォーマットを使っているのであれば、この要素のフォールバック・コンテンツを見せるよう求めることが考えられます。
-
この要素がメディア要素を祖先に持つ、または、フォールバック・コンテンツを表示しない
object要素を祖先に持つ、または、この要素がブラウジング・コンテキストを持つDocumentの中にない、または、この要素のDocumentが完全にアクティブでない、または、この要素が HTML パーサーや XML パーサーの開いた要素のスタックにまだいるなら、この手順全体における最後の手順にジャンプします(フォールバック)。 -
classid属性が存在し、その値が空文字列でない場合:ユーザーエージェントがclassid属性の値によって適切なプラグインを見つけることができ、プラグインがサンドボックス化されていないなら、そのプラグインは使われるべきです。そして、data属性の値があれば、その値をそのプラグインに引き渡すべきです。適切なプラグインが見つからない、または、そのプラグインがエラーを報告したら、この手順全体における最後の手順(フォールバック)に飛びます。 -
data属性が存在し、その値が空文字列でない場合:-
type属性が存在し、その値がユーザーエージェントがサポートするタイプでなく、ユーザーエージェントがプラグインを見つけることができるタイプでなければ、ユーザーエージェントは、本当のタイプを調べるためにコンテンツをフェッチすることなしに、この手順全体における最後の手順(フォールバック)に飛ぶことができます。 -
それに失敗したら、この要素で
errorという名前のシンプルなイベントを発出します。そして、この手順全体における最後の手順(フォールバック)に飛びます。 -
この要素にブラウジング・コンテキスト・スコープ・オリジンがあれば、そこから、結果として得られた絶対 URL をフェッチします。
そのリソースがフェッチ(次で定義します)されたら、ネットワーキング・タスク・ソースによってキューイングされているタスクが実行されるまで、この要素のドキュメントの load イベントが遅らせられなければいけません。
-
そのリソースがまだ利用可能でなければ(例:そのリソースがキャッシュで利用できず、ネットワーク越しにリクエストしなければならなくなった、といった理由のため)、この手順全体における最後の手順(フォールバック)に飛びます。そのリソースが利用可能になったら、ネットワーキング・タスク・ソースによってキューイングされているタスクは、この手順のこのアルゴリズムを再び開始しなければいけません。リソースは徐々にロードすることができます。ユーザーエージェントは、リソースの処理が開始できるのに十分なデータが取得できたらいつでも、そのリソースを "利用可能" と見なすという選択を取ることができます。
-
ロードに失敗したら(例:HTTP 404 error だった、DOSエラーだった)、その要素で
errorという名前のシンプルなイベントを発出します。それから、この手順全体における最後の手順(フォールバック)に飛びます。 -
resource type を次の通りに決定します:
-
resource type を unknown とします。
-
sniffed フラグを false とします。
-
ユーザーエージェントがこのリソースに対して Content-Type ヘッダーに厳密に従うよう設定されており、そのリソースが関連付けられた Content-Type メタデータを持つなら、resource type をリソースの Content-Type メタデータに指定されたタイプとし、これらの副手順を中止します。
-
type属性がobject要素にあり、その属性の値がユーザーエージェントがサポートするタイプではないけれども、プラグインがサポートするタイプなら、resource type を、そのtype属性に指定されたタイプとします。 -
そうでなければ、resource type が unknown で、そのリソースが関連付けられた Content-Type メタデータを持つなら、resource type を、リソースの Content-Type メタデータに指定されたタイプとします。
この結果、resource type が "
text/plain" となったら、resource type を、リソースがテキストかバイナリーかを判定する規則をそのリソースに適用した結果とします。それから、sniffed フラグを true にします。 -
この時点で、resource type が unknown か "
application/octet-stream" で、type属性がobject要素にあれば、resource type を、そのtype属性に指定されたタイプとします。そうでなければ、resource type が "
application/octet-stream" で、そのobject要素にtype属性がなければ、resource type を unknown に変更して、次の手順にあるスニッフィング規則が呼び出されるようにします。 -
この時点で、今なお、resource type が unknown で、指定されたリソース(リダイレクトがあればその後の)の URL の <path> コンポーネントが、プラグインがサポートするパターンに一致するなら、resource type を、そのプラグインが処理できるタイプとします。
例えば、プラグインは、4 文字の文字列 "
.swf" で終わる <path> コンポーネントを持ったリソースを処理できる、と言うことができるでしょう。 -
今なお、resource type が unknown で、sniffed フラグが false なら、resource type を、リソースの傍受タイプとなるよう変更します。
そうでなければ、今なお、resource type が unknown で、sniffed フラグが true なら、resource type を
text/plainに戻します。
-
-
次に挙げるうち最初に一致する場合の内容を処理します:
- resource type はユーザーエージェントがサポートするタイプではないけれども、プラグインがサポートするタイプの場合
-
プラグインがサンドボックス化されているなら、この手順全体における最後の手順(フォールバック)にジャンプします。
そうでなければ、ユーザーエージェントは、resource type をサポートするプラグインを使い、そのプラグインにそのリソースのコンテンツを引き渡すべきです。プラグインがエラーを報告したら、この手順全体における最後の手順(フォールバック)にジャンプします。
- resource type が XML MIME タイプの場合、または、resource type が "
image/" で始まらない場合 -
object要素は、新たに生成されたネストされたブラウジング・コンテキストを持つなら、それと関連付けられなければいけません。もし指定のリソースの URL が
about:blankではないなら、その要素のネストされたブラウジング・コンテキストはそのリソースへナビゲートされなければいけません。そして、ソース・ブラウジング・コンテキストとして、そのobject要素のドキュメントのブラウジング・コンテキストを使わなければいけません。(object要素のdata属性は、ブラウジング・コンテキストがさらに別のロケーションへナビゲートされるのであれば、アップデートされることはありません。)もし指定のリソースの URL が
about:blankなら、代わりに、ユーザーエージェントは、そのobject要素でloadという名前のシンプルなイベントを発出するタスクをキューイングしなければいけません。その
object要素は、そのネストされたブラウジング・コンテキストを表します。name属性が存在するなら、そのブラウジング・コンテキスト名は、この属性の値にセットされなければいけません。そうでなければ、そのブラウジング・コンテキスト名は空文字列にセットされなければいけません。ブラウジング・コンテキストのナビゲーションが実際に異なるアプリケーション・キャッシュからリソースを取得するということはあり得ます。たとえ、そのリソースが違うタイプを持つと分かっても、それはネストされたブラウジング・コンテキストの一部として使われ続けます。このアルゴリズムは、新たなリソースを使って再スタートすることはありません。
- resource type が "
image/" で始まり、画像のサポートが無効にされていない場合 -
イメージのタイプを判定するために、イメージ・スニッフィング規則を適用します。
この
object要素は、指定のイメージを表します。そのイメージはネストされたブラウジング・コンテキストではありません。不正な形式や未サポートの形式だったなどの理由で、そのイメージがリンダリングできないなら、この手順全体における最後の手順(フォールバック)にジャンプします。
- そうでなければ
-
指定の resource type はサポートされていません。この手順全体における最後の手順(フォールバック)にジャンプします。
-
この要素のコンテンツは、その
object要素が表しているものではありません。 -
リソースが完全にロードされたら、この要素で
loadという名前のシンプルなイベントを発出するタスクをキューイングします。このタスクに対するタスク・ソースは、DOM マニュピュレーション・タスク・ソースです。
-
-
data属性がないけれどもtype属性があるなら、プラグインはサンドボックス化されていないことになります。そして、ユーザーエージェントは、type属性の値によって、プラグインが適切だと判定します。それから、そのプラグインが使われるべきです。適切なプラグインが見つけられなければ、または、そのプラグインがエラーを報告したら、次の手順にジャンプします(フォールバック)。 -
(フォールバック)
object要素は、その要素の子を表します。ただし、子として最初に来るparam要素はすべて無視します。これは、この要素のフォールバック・コンテンツとなります。この要素がインスタンス化されたプラグインを持つなら、それをアンロードします。
上記のアルゴリズムがプラグインのインスタンスを生成するとき、ユーザーエージェントは、その要素上のすべての属性の名前と値を、それらがその要素に追加された順番で、パーサーによってソース順に並べて追加された属性を使って、そのプラグインに引き渡すべきです。加えて、値が null となる "PARAM" という名前のパラメータ、その次に、該当の object 要素の子となる param 要素に指定されたパラメータの名前と値がツリー順に続きます。プラグインがスクリプトのインタフェースをサポートしているなら、該当の要素を表している HTMLObjectElement オブジェクトから、そのインタフェースにアクセスできるようにするべきです。object 要素はプラグインを表します。そのプラグインはネストされたブラウジング・コンテキストではありません。
以下のいずれかの場合:
object要素のDocumentが生成されたときに、そのブラウジング・コンテキストにサンドボックス化プラグイン・ブラウジング・コンテキスト・フラグがセットされていた、または、object要素のDocumentが、ナビゲーション中に決定された傍受タイプがtext/html-sandboxedとなるリソースからパースされた
... 上記いずれかなら、プラグインが使われていたとしても、上記の手順は、プラグインの発見に失敗したかのように動作しなければいけません。
前述のアルゴリズムは CSS プロパティ(display', 'overflow', 'visibility' を含む)とは無関係です。例えば、この要素が display:none' CSS スタイルによって非表示だとしても、実行されます。この要素の表示・非表示が変わっても、再実行されることはありません。
上記のアルゴリズムによって、object 要素のコンテンツは、参照リソースを表示することができないときに限り、フォールバック・コンテンツの役割を果たします(404 エラーを返すからです)。こうすることで、object 要素をどれだけでも深くネストすることができるようになり、機能が違うユーザーエージェントをいくつもターゲットとすることができるようになります。ユーザーエージェントは、そのうち、自身がサポートしている最初のものを採用することになります。
name 属性がセットされたらいつでも、object 要素がネストされたブラウジング・コンテキストを持つなら、その名前は新しい値に変更されなければいけません。この属性が削除され、object 要素がブラウジング・コンテキストを持つなら、そのブラウジング・コンテキスト名は、空文字列にセットされなければいけません。
object 要素が画像を表す場合 に usemap 属性が存在すれば、それは、その object 要素が関連するイメージマップを持つことを意味することができます。この属性は、object 要素が画像を表さない場合は、無視されなければいけません。
form 属性は、明示的にその object 要素をフォーム・オーナーに結びづけるために使われます。
制約バリデーション:object 要素は常に、制約バリデーションから除外されます。
IDL 属性 data, type, name, useMap はそれぞれ、同じ名前の対応するコンテンツ属性を反映しなければいけません。
contentDocument IDL 属性は、object 要素のネストされたブラウジング・コンテキストのアクティブ・ドキュメントがあれば、その Document オブジェクトを返さなければいけません。なければ null を返さなければいけません。
contentWindow IDL 属性は、object 要素のネストされたブラウジング・コンテキストがあれば、その WindowProxy オブジェクトを返さなければいけません。なければ null を返さなければいけません。
willValidate, validity, validationMessage 属性、そして、checkValidity(), setCustomValidity() メソッドは、制約バリデーション API の一部となります。
次の例では、Javaアプレットが object 要素を使ってページに組み込まれています。(一般的にいえば、このようなアプレットの利用を避け、代わりに、ネイティブのJavaScriptとHTMLを機能提供のために使う方が良いでしょう。こうすることで、サードパーティのプラグインを要求せずとも、すべてのブラウザでこのアプリケーションが動作するでしょう。多くのデバイス、とりわけ組込デバイスは、Javaといったサードパーティ製テクノロジーをサポートしていません。)
<figure> <object type="application/x-java-applet"> <param name="code" value="MyJavaClass"> <p>You do not have Java available, or it is disabled.</p> </object> <legend>My Java Clock</legend> </figure>
この例では、一方のHTMLページが、もう一方のページから object 要素を使って組み込まれています。
<figure> <object data="clock.html"></object> <legend>My HTML Clock</legend> </figure>
次の例は、どのようにして プラグインを HTML の中で使うことができるのかを示しています(ここでは、ビデオ・ファイルを見せるために、Flash プラグインを使います)。Flash が組み込んでいないユーザーには、フォールバックを提供しています。ここでは、video 要素をサポートしているユーザーエージェントを使っているユーザーに対しては video 要素を使ってビデオを見せるようにしています。そして、さらに、Flash も video 未対応ブラウザーもないユーザーに対しては、ビデオへのリンクを提供しています。
<p>Look at my video: <object type="application/x-shockwave-flash"> <param name=movie value="http://video.example.com/library/watch.swf"> <param name=allowfullscreen value=true> <param name=flashvars value="http://video.example.com/vids/315981"> <video controls src="http://video.example.com/vids/315981"> <a href="http://video.example.com/vids/315981">View video</a>. </video> </object> </p>
※ 原文:http://www.w3.org/TR/2010/WD-html5-20100304/text-level-semantics.html#the-object-element