object 要素

4.8.4 object 要素

Status: Last call for comments

カテゴリー
フロー・コンテンツ
フレージング・コンテンツ
エンベッディッド・コンテンツ
usemap 属性を持つ場合:インタラクティブ・コンテンツ
リストされ、サブミット可能フォーム関連要素
この要素を使うことができるコンテキスト:
エンベッディッド・コンテンツが期待される場所
コンテンツモデル:
0 個以上の param 要素。その次にトランスペアレント
コンテンツ属性:
グローバル属性
data
type
name
usemap
form
width
height
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 タイプでなければいけません。

datatype 属性の少なくとも一方は存在しなければいけません。

name 属性が存在すれば、それは妥当なブラウジング・コンテキスト名でなければいけません。指定の値は、適切であれば、ネストされたブラウジング・コンテキストの名前に使われます。

この要素が生成され、HTML パーサーXML パーサー開いた要素のスタックから取り出される場合において、それに続いて、この要素がドキュメントに挿入されたり、ドキュメントから削除されるとき、そして、この要素の Document完全にアクティブかどうかが変わるとき、そして、祖先の object 要素がそのフォールバック・コンテンツの表示・非表示が変わるとき、そして、この要素の classid 属性がセット、変更、削除されるとき、そして、classid 属性が存在しない場合に data 属性がセット、変更、削除されるとき、そして、classid 属性も data 属性も存在しない場合に type 属性がセット、変更、削除されるとき:ユーザーエージェントは、その object 要素が何を表すのかを(再)決定するために次の手順を実行するタスクをキューイングしなければいけません。このタスクに対するタスク・ソースは、DOM マニュピュレーション・タスク・ソースです。

  1. object の通常のビヘイビアの代わりに、その要素のフォールバック・コンテンツを表示するようユーザーが設定していたら、この手順全体における最後の手順にジャンプします(フォールバック)。

    例えば、ユーザーによっては、よりアクセシブルだと思うフォーマットを使っているのであれば、この要素のフォールバック・コンテンツを見せるよう求めることが考えられます。

  2. この要素がメディア要素を祖先に持つ、または、フォールバック・コンテンツを表示しない object 要素を祖先に持つ、または、この要素がブラウジング・コンテキストを持つ Document の中にない、または、この要素の Document完全にアクティブでない、または、この要素が HTML パーサーXML パーサー開いた要素のスタックにまだいるなら、この手順全体における最後の手順にジャンプします(フォールバック)。

  3. classid 属性が存在し、その値が空文字列でない場合:ユーザーエージェントが classid 属性の値によって適切なプラグインを見つけることができ、プラグインがサンドボックス化されていないなら、そのプラグイン使われるべきです。そして、data 属性の値があれば、その値をそのプラグインに引き渡すべきです。適切なプラグインが見つからない、または、そのプラグインがエラーを報告したら、この手順全体における最後の手順(フォールバック)に飛びます。

  4. data 属性が存在し、その値が空文字列でない場合:

    1. type 属性が存在し、その値がユーザーエージェントがサポートするタイプでなく、ユーザーエージェントがプラグインを見つけることができるタイプでなければ、ユーザーエージェントは、本当のタイプを調べるためにコンテンツをフェッチすることなしに、この手順全体における最後の手順(フォールバック)に飛ぶことができます。

    2. data 属性に指定された URL を、その要素に対して、解決します。

    3. それに失敗したら、この要素で error という名前のシンプルなイベントを発出します。そして、この手順全体における最後の手順(フォールバック)に飛びます。

    4. この要素にブラウジング・コンテキスト・スコープ・オリジンがあれば、そこから、結果として得られた絶対 URL をフェッチします。

      そのリソースがフェッチ(次で定義します)されたら、ネットワーキング・タスク・ソースによってキューイングされているタスクが実行されるまで、この要素のドキュメントの load イベントが遅らせられなければいけません。

    5. そのリソースがまだ利用可能でなければ(例:そのリソースがキャッシュで利用できず、ネットワーク越しにリクエストしなければならなくなった、といった理由のため)、この手順全体における最後の手順(フォールバック)に飛びます。そのリソースが利用可能になったら、ネットワーキング・タスク・ソースによってキューイングされているタスクは、この手順のこのアルゴリズムを再び開始しなければいけません。リソースは徐々にロードすることができます。ユーザーエージェントは、リソースの処理が開始できるのに十分なデータが取得できたらいつでも、そのリソースを "利用可能" と見なすという選択を取ることができます。

    6. ロードに失敗したら(例:HTTP 404 error だった、DOSエラーだった)、その要素で error という名前のシンプルなイベントを発出します。それから、この手順全体における最後の手順(フォールバック)に飛びます。

    7. resource type を次の通りに決定します:

      1. resource type を unknown とします。

      2. sniffed フラグを false とします。

      3. ユーザーエージェントがこのリソースに対して Content-Type ヘッダーに厳密に従うよう設定されており、そのリソースが関連付けられた Content-Type メタデータを持つなら、resource typeリソースの Content-Type メタデータに指定されたタイプとし、これらの副手順を中止します。

      4. type 属性が object 要素にあり、その属性の値がユーザーエージェントがサポートするタイプではないけれども、プラグインがサポートするタイプなら、resource type を、その type 属性に指定されたタイプとします。

      5. そうでなければ、resource type が unknown で、そのリソースが関連付けられた Content-Type メタデータを持つなら、resource type を、リソースの Content-Type メタデータに指定されたタイプとします。

        この結果、resource type が "text/plain" となったら、resource type を、リソースがテキストかバイナリーかを判定する規則をそのリソースに適用した結果とします。それから、sniffed フラグを true にします。

      6. この時点で、resource type が unknown か "application/octet-stream" で、type 属性が object 要素にあれば、resource type を、その type 属性に指定されたタイプとします。

        そうでなければ、resource type が "application/octet-stream" で、その object 要素に type 属性がなければ、resource type を unknown に変更して、次の手順にあるスニッフィング規則が呼び出されるようにします。

      7. この時点で、今なお、resource type が unknown で、指定されたリソース(リダイレクトがあればその後の)の URL<path> コンポーネントが、プラグインがサポートするパターンに一致するなら、resource type を、そのプラグインが処理できるタイプとします。

        例えば、プラグインは、4 文字の文字列 ".swf" で終わる <path> コンポーネントを持ったリソースを処理できる、と言うことができるでしょう。

      8. 今なお、resource type が unknown で、sniffed フラグが false なら、resource type を、リソースの傍受タイプとなるよう変更します。

        そうでなければ、今なお、resource type が unknown で、sniffed フラグが true なら、resource typetext/plain に戻します。

    8. 次に挙げるうち最初に一致する場合の内容を処理します:

      resource type はユーザーエージェントがサポートするタイプではないけれども、プラグインがサポートするタイプの場合

      プラグインがサンドボックス化されているなら、この手順全体における最後の手順(フォールバック)にジャンプします。

      そうでなければ、ユーザーエージェントは、resource type をサポートするプラグインを使い、そのプラグインにそのリソースのコンテンツを引き渡すべきです。プラグインがエラーを報告したら、この手順全体における最後の手順(フォールバック)にジャンプします。

      resource typeXML MIME タイプの場合、または、resource type が "image/" で始まらない場合

      object 要素は、新たに生成されたネストされたブラウジング・コンテキストを持つなら、それと関連付けられなければいけません。

      もし指定のリソースの URLabout:blank ではないなら、その要素のネストされたブラウジング・コンテキストはそのリソースへナビゲートされなければいけません。そして、ソース・ブラウジング・コンテキストとして、その object 要素のドキュメントのブラウジング・コンテキストを使わなければいけません。(object 要素の data 属性は、ブラウジング・コンテキストがさらに別のロケーションへナビゲートされるのであれば、アップデートされることはありません。)

      もし指定のリソースの URLabout:blank なら、代わりに、ユーザーエージェントは、その object 要素で load という名前のシンプルなイベントを発出するタスクをキューイングしなければいけません。

      その object 要素は、そのネストされたブラウジング・コンテキスト表します。

      name 属性が存在するなら、そのブラウジング・コンテキスト名は、この属性の値にセットされなければいけません。そうでなければ、そのブラウジング・コンテキスト名は空文字列にセットされなければいけません。

      ブラウジング・コンテキストナビゲーションが実際に異なるアプリケーション・キャッシュからリソースを取得するということはあり得ます。たとえ、そのリソースが違うタイプを持つと分かっても、それはネストされたブラウジング・コンテキストの一部として使われ続けます。このアルゴリズムは、新たなリソースを使って再スタートすることはありません。

      resource type が "image/" で始まり、画像のサポートが無効にされていない場合

      イメージのタイプを判定するために、イメージ・スニッフィング規則を適用します。

      この object 要素は、指定のイメージを表します。そのイメージはネストされたブラウジング・コンテキストではありません。

      不正な形式や未サポートの形式だったなどの理由で、そのイメージがリンダリングできないなら、この手順全体における最後の手順(フォールバック)にジャンプします。

      そうでなければ

      指定の resource type はサポートされていません。この手順全体における最後の手順(フォールバック)にジャンプします。

    9. この要素のコンテンツは、その object 要素が表しているものではありません。

    10. リソースが完全にロードされたら、この要素で load という名前のシンプルなイベントを発出するタスクをキューイングします。

      このタスクに対するタスク・ソースは、DOM マニュピュレーション・タスク・ソースです。

  5. data 属性がないけれども type 属性があるなら、プラグインはサンドボックス化されていないことになります。そして、ユーザーエージェントは、type 属性の値によって、プラグインが適切だと判定します。それから、そのプラグイン使われるべきです。適切なプラグインが見つけられなければ、または、そのプラグインがエラーを報告したら、次の手順にジャンプします(フォールバック)。

  6. (フォールバック) object 要素は、その要素の子を表します。ただし、子として最初に来る param 要素はすべて無視します。これは、この要素のフォールバック・コンテンツとなります。この要素がインスタンス化されたプラグインを持つなら、それをアンロードします。

上記のアルゴリズムがプラグインのインスタンスを生成するとき、ユーザーエージェントは、その要素上のすべての属性の名前と値を、それらがその要素に追加された順番で、パーサーによってソース順に並べて追加された属性を使って、そのプラグインに引き渡すべきです。加えて、値が null となる "PARAM" という名前のパラメータ、その次に、該当の object 要素の子となる param 要素に指定されたパラメータの名前と値がツリー順に続きます。プラグインがスクリプトのインタフェースをサポートしているなら、該当の要素を表している HTMLObjectElement オブジェクトから、そのインタフェースにアクセスできるようにするべきです。object 要素はプラグイン表します。そのプラグインはネストされたブラウジング・コンテキストではありません。

以下のいずれかの場合:

... 上記いずれかなら、プラグインが使われていたとしても、上記の手順は、プラグインの発見に失敗したかのように動作しなければいけません。

前述のアルゴリズムは CSS プロパティ(display', 'overflow', 'visibility' を含む)とは無関係です。例えば、この要素が display:none' CSS スタイルによって非表示だとしても、実行されます。この要素の表示・非表示が変わっても、再実行されることはありません。

上記のアルゴリズムによって、object 要素のコンテンツは、参照リソースを表示することができないときに限り、フォールバック・コンテンツの役割を果たします(404 エラーを返すからです)。こうすることで、object 要素をどれだけでも深くネストすることができるようになり、機能が違うユーザーエージェントをいくつもターゲットとすることができるようになります。ユーザーエージェントは、そのうち、自身がサポートしている最初のものを採用することになります。

name 属性がセットされたらいつでも、object 要素がネストされたブラウジング・コンテキストを持つなら、その名前は新しい値に変更されなければいけません。この属性が削除され、object 要素がブラウジング・コンテキストを持つなら、そのブラウジング・コンテキスト名は、空文字列にセットされなければいけません。

object 要素が画像を表す場合 に usemap 属性が存在すれば、それは、その object 要素が関連するイメージマップを持つことを意味することができます。この属性は、object 要素が画像を表さない場合は、無視されなければいけません。

form 属性は、明示的にその object 要素をフォーム・オーナーに結びづけるために使われます。

制約バリデーション: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