embed 要素

4.7.3 embed 要素

カテゴリー:
フロー・コンテント
フレージング・コンテント
エンベッディッド・コンテント
インタラクティブ・コンテント
パルパブル・コンテント
この要素を使うことができるコンテキスト:
エンベッディッド・コンテントが期待される場所
コンテントモデル:
コンテント属性:
グローバル属性
src - リソースのアドレス
type - 組込リソースのタイプ
width - 水平方向の寸法
height- 垂直方向の寸法
名前空間を持たないあらゆる属性 (本文参照のこと)
text/html におけるタグの省略:
終了タグはありません。
指定可能な ARIA role 属性 の値:
application, document または img または presentation
指定可能な ARIA ステートとプロパティ属性:
グローバル aria-* 属性
DOM インタフェース:
interface HTMLEmbedElement : HTMLElement {
           attribute DOMString src;
           attribute DOMString type;
           attribute DOMString width;
           attribute DOMString height;
  legacycaller any (any... arguments);
};

embed 要素によってインスタンス化されたコンテンツのタイプに応じて、このノードは他のインタフェースもサポートすることができます。

embed 要素は、外部の(通常は非 HTML)アプリケーションやインタラクティブ・コンテントのための統合ポイントを表します。

src 属性は、組み込まれるリソースのアドレスを与えます。この属性が存在すれば、それは潜在的にスペースで囲まれた空でない妥当な URL を含まなければいけません。

type 属性が存在したら、それは、どのプラグインをインスタンス化するのかを選択するための MIME タイプを与えます。その値は妥当な MIME タイプでなければいけません。もし type 属性と src 属性の両方が存在したら、type 属性は、src 属性で指定されたリソースの明示的な Content-Type メタデータと同じタイプを指定しなければいけません。

この要素が src 属性も type 属性も使わずに生成されたとき、属性が削除されてこの要素にもう属性が存在しないとき、この要素が祖先にメディア要素を持つとき、この要素が祖先にフォールバック・コンテントを見せていない object 要素を持つときは、この要素に対してインスタンス化されたあらゆるプラグインが削除されなければいけません。そして、embed 要素は何も表しません。

embed 要素は、次のすべての条件が同時に満たされるとき、潜在的にアクティブと言います:

潜在的にアクティブでない embed 要素が潜在的にアクティブになるとき、そして、潜在的にアクティブな状態を維持し続けている潜在的にアクティブembed 要素の src 属性がセット、変更、削除された、または、その type 属性がセット、変更、削除されたときは必ず、ユーザーエージェントはエンベッド・タスクソースを使ってタスクをキューイングし、embed 要素セットアップ手順を実行しなければいけません。

embed 要素セットアップ手順は次のとおりです:

  1. 別のタスクembed 要素セットアップ手順を実行するためにキューイングされているなら、これらの手順を中止します。

  2. 要素に src 属性がセットされている場合

    ユーザーエージェントは、要素の src 属性の値を、その要素に対して解決しなければいけません。それが成功したら、ユーザーエージェントは、その要素のブラウジングコンテキスト・スコープ・オリジンがあれば、そこから、結果として得られた絶対 URLフェッチするべきです。ネットワーキング・タスクソースによってキューイングされたタスクは、リソースがフェッチされたら、次の手順を実行しなければいけません:

    1. 別のタスクがこの要素に対して embed 要素セットアップ手順を実行するためにキューイングされているなら、これらの手順を中止します。

    2. 組み込まれているコンテンツのタイプを、次のように決定します (stopping at the first substep that determines the type):

      1. 要素が type 属性を持ち、その属性の値がプラグインがサポートしているタイプなら、その type 属性の値がコンテンツのタイプとなります。

      2. そうでなければ、URL パーサーアルゴリズムを指定リソースの URL に適用して得られたパース済み URLパス・コンポーネントが、プラグインがサポートするパターンに一致するならば、そのコンテンツのタイプは、そのプラグインが扱うことができるそのタイプとなります。

        たとえば、4 つの文字列 ".swf" で終わるパス・コンポーネントを持つリソースを扱うことができる、とプラグインが言うかもしれません。

      3. そうでなければ、指定リソースが明示的な Content-Type メタデータを持つなら、それがコンテンツのタイプとなります。

      4. そうでなければ、そのコンテンツはタイプを持たず、それに対する適切なプラグインは存在し得ない、ということになります。

    3. 前の手順で、コンテンツのタイプimage/svg+xml だと判定されたなら、次の副手順を実行します:

      1. embed 要素がネストされたブラウジングコンテキストと関連付けられていないなら、その要素を新たに生成されたネストされたブラウジングコンテキストと関連付けます。そして、その要素に name 属性があれば、その要素のネストされたブラウジングコンテキストブラウジングコンテキスト名を、この属性の値にセットします。

      2. ネストされたブラウジングコンテキストを、フェッチされたリソースへナビゲートします。その際、置換有効です。そして、ソース・ブラウジングコンテキストとして、その embed 要素のドキュメントのブラウジングコンテキストを使います。(ブラウジングコンテキストが他の場所にさらにナビゲートされるなら、embed 要素の src 属性は更新されません。)

      3. これで、embed 要素は、その関連付けされたネストされたブラウジングコンテキスト表すことになります。

    4. そうでなければ、コンテンツのタイプにもとづいて、適切なプラグインを見つけてインスタンス化し、そのプラグインをそのリソースのコンテンツに渡し、その要素に対してすでにインスタンス化されていたプラグインを置き換えます。これで、この embed 要素は、このプラグインのインスタンスを表すことになります。

    リソースが成功裏にフェッチされたかどうか (たとえば、レスポンスコードが 2xx コード相当かどうか) は、コンテンツのタイプを決定するときと、プラグインにリソースを渡すときには、無視されなければいけません。

    これによって、サーバーは、エラーレスポンスですらプラグインに対してデータを返すことができるようになります (たとえば、HTTP 500 Internal Server Error コードでも、プラグインのデータを入れることができます)。

    リソースのフェッチは、要素のドキュメントの load イベントを遅延させなければいけません。

    要素に src 属性がセットされていない場合

    ユーザーエージェントは、type 属性の値に基づいて、適切なプラグインを見つけてインスタンス化するべきです。これで、embed 要素はこのプラグインのインスタンスを表すことになります。

embed 要素にフォールバック・コンテントはありません。ユーザーエージェントが前述のアルゴリズムで適切なプラグインを見つけてインスタンス化を試みたものの、それが見つからなかったなら、ユーザーエージェントは、デフォルトのプラグインを使わなければいけません。このデフォルトとは、"非対応の形式" と言うだけの簡単なものです。

潜在的にアクティブだった embed 要素が潜在的にアクティブであることをやめるときは常に、その要素でインスタンス化されたあらゆるプラグインはアンロードされなければいけません。

プラグインがインスタンス化されることになったものの、安全に実行することができず、その embed 要素の Documentアクティブ・サンドボックス・フラグセットサンドボックス化プラグイン・ブラウジングコンテキスト・フラグがセットされているときは、ユーザーエージェントはそのプラグインをインスタンス化してはいけません。そして、代わりに、そのプラグインが無効であったことを伝えるような形でその embed 要素をレンダリングしなければいけません。ユーザーエージェントは、サンドボックスを無効にして、とにかくそのプラグインをインスタンス化するオプションをユーザーに提供することができます。もしユーザーがそのようなオプションを呼び出したなら、ユーザーエージェントは、前述の条件がこの要素の処理に適用されなかったかのように動作しなければいけません。

安全に実行することができないプラグインは、サンドボックス化ブラウジングコンテキストの中では無効になります。なぜなら、それらは、サンドボックスによって課せられた制約を守らないかもしれないからです (たとえば、サンドボックスの中のスクリプトが無効になっているときですらスクリプトを許可してしまうかもしれません)。ユーザーエージェントは、サンドボックスを無効にするオプションを提供するなら、ユーザーにそうすることの危険性を伝えるべきです。

name, align, hspace, vspace 以外でも、名前空間がない属性は何でも embed 要素に指定することができます。ただし、その名前が XML 互換で、大文字の ASCII 文字を含まない場合に限ります。これらの属性は、プラグインにパラメータとして引き渡されます。

HTML ドキュメントのすべての属性は自動的に小文字にされるため、この大文字に関する制約は、そういったドキュメントに影響をあたえることはありません。

この 4 つの例外は、プラグインにパラメータを送るということだけでなく、副作用を持つ古い属性を排除するためでもあります。

ユーザーエージェントは、プラグインがインスタンス化される際には、そのプラグインに、名前空間を持たない embed 要素のすべての属性の名前と値を引き渡すべきです。

この要素を表す HTMLEmbedElement オブジェクトは、その embed 要素に対してインスタンス化されたプラグインのスクリプト用のインタフェースがあるなら、それを利用できるようにしなければいけません。最低でも、このインタフェースは、legacy caller operation を実装しなければいけません。(この legacy caller operation のデフォルトビヘイビア、たとえば、デフォルトのプラグインの legacy caller operation のビヘイビアは、NotSupportedError 例外を投げることが推奨されます。)

embed 要素はディメンジョン属性をサポートします。

IDL 属性 srctype はそれぞれ同じ名前の対応するコンテント属性を反映しなければいけません。

これは、Flash のような企業独自のプラグインを求めるリソースを組み込む方法を示しています:

<embed src="catgame.swf">

ユーザーがプラグインを持っていなければ (たとえば、そのプラグインのベンダーが、そのユーザーのプラットフォームをサポートしていない)、ユーザーはそのリソースを使うことはできません。

値 "high" を持つパラメータ "quality" を引き渡すために、属性をひとつ指定することができます:

<embed src="catgame.swf" quality="high">

これは、object 要素を使った場合は、次と等価です:

<object data="catgame.swf">
 <param name="quality" value="high">
</object>

※ 原文:http://www.w3.org/TR/2014/REC-html5-20141028/embedded-content-0.html#the-embed-element