embed 要素
4.8.3 embed 要素
- カテゴリー
- フロー・コンテンツ
- フレージング・コンテンツ
- エンベッディッド・コンテンツ
- インタラクティブ・コンテンツ
- この要素を使うことができるコンテキスト:
- エンベッディッド・コンテンツが期待される場所
- コンテンツモデル:
- 空
- コンテンツ属性:
- グローバル属性
srctypewidthheight- 名前空間を持たないあらゆる属性(本文参照のこと)
- DOMインタフェース:
-
interface HTMLEmbedElement : HTMLElement { attribute DOMString src; attribute DOMString type; attribute DOMString width; attribute DOMString height; };
embed要素によってインスタンス化されたコンテンツのタイプによって、このノードは他のインタフェースもサポートする場合があります。
embed 要素は、外部の(通常は非HTML)アプリケーションやインタラクティブ・コンテンツのための統合ポイントを表します。
src 属性は、組み込まれるリソースのアドレスを与えます。この属性が存在すれば、それは潜在的にスペースで囲まれた空でない妥当な URL を含まなければいけません。
type 属性が存在したら、それは、インスタンスを生成するために、プラグインの MIME タイプを与えます。その値は妥当な MIME タイプでなければいけません。もし type 属性と src 属性の両方が存在したら、type 属性は、src 属性で指定されたリソースの明示的な Content-Type メタデータと同じタイプを指定しなければいけません。
この要素が src 属性も type 属性も使わずに生成されたとき、属性が削除されてこの要素にもう属性が存在しないとき、この要素が祖先にメディア要素を持つとき、この要素が祖先にフォールバック・コンテンツを見せていない object 要素を持つとき、この要素に対してインスタンス化されたあらゆるプラグインが削除されなければいけません。そして、embed 要素は何も表しません。
以下のいずれかの場合:
- 該当の
embed要素のDocumentが生成されたとき、そのDocumentがアクティブ・ドキュメントとなるブラウジング・コンテキストにサンドボックス化プラグイン・ブラウジング・コンテキスト・フラグがセットされていた場合。 - 該当の
embed要素のDocumentが、ナビゲーション中に判定した傍受タイプがtext/html-sandboxedとなるリソースからパースされた場合。
上記に該当するとき、ユーザーエージェントは、プラグインが無効にされたことがわかるように、embed 要素をレンダリングしなければいけません。ユーザーエージェントは、サンドボックスを書き換え、そのプラグインをとにかくインスタンス化するオプションをユーザーに提供することができます。もしユーザーがそのようなオプションを呼び出したら、ユーザーエージェントは、あたかも上記の条件がこの要素の目的において当てはまらなかったかのように振る舞わなければいけません。
プラグインは、サンドボックス化ブラウジング・コンテキストで無効にされます。なぜなら、プラグインはサンドボックスによって課せられた制限に従わないかもしれないからです(たとえば、サンドボックス内のスクリプティングが無効になっているときですら、プラグインがスクリプティングを許してしまうかもしれません。)。ユーザーエージェントは、そのようにオプションが使われたら、サンドボックスを無効にすることは危険なことだとユーザーに伝えるべきです。
embed 要素は、次の条件のすべてに同時に一致するとき、潜在的にアクティブと言います:
- この要素が
Documentの中にある。 - この要素の
Documentが完全にアクティブである。 - この要素に
src属性またはtype属性のいずれか(もしくは両方)がセットされている。 - この要素に
src属性が存在しない、または、その値が空文字列である。 - この要素は、
Documentが生成されたときに、ブラウジング・コンテキストがサンドボックス化プラグイン・ブラウジング・コンテキスト・フラグがセットされたDocumentの中にない(これが前述のように書き換えられなかった場合に限る)。 - この要素の
Documentは、ナビゲーション中に判定した傍受タイプがtext/html-sandboxedとなるリソースからパースされなかった(これが前述のように書き換えられなかった場合に限る)。 - この要素がメディア要素の子孫ではない。
- この要素が、フォールバック・コンテンツを見せていない
object要素の子孫でない。
潜在的にアクティブでなかった embed 要素が潜在的にアクティブになったときや、潜在的にアクティブな embed 要素の src 属性がセットされたり変更されたり削除されたときや、潜在的にアクティブな embed 要素の type 属性がセットされたり変更されたり削除されたときは、次に挙げる手順のセットから適切なものが適用されます:
- この要素に
src属性がセットされた場合 -
ユーザーエージェントは、この要素の
src属性の値を、この要素に対して、解決しなければいけません。それが成功したら、ユーザーエージェントは、この要素のブラウジング・コンテキスト・スコープ・オリジンがあれば、そこから、結果として得られた絶対 URL をフェッチするべきです。そのリソースがフェッチされ、ネットワーキング・タスク・ソースによってキューイングされたタスクは、コンテンツのタイプに基づいて適切なプラグインを見つけてインスタンス化しなければいけません。そして、そのプラグインを、そのリソースのコンテンツに引き渡して、その要素に対してすでにインスタンス化されたプラグインを置き換えなければいけません。リソースのフェッチは、この要素のドキュメントの load イベントを遅らせなければいけません。
- この要素に
src属性がセットされなかった場合
潜在的にアクティブだった embed 要素が潜在的にアクティブであることをやめるときは、その要素に対してインスタンス化されていたプラグインはアンロードされなければいけません。
embed 要素は、CSS の 'display' プロパティによって影響を受けることはありません。選択されたプラグインは、その要素が 'display:none' CSS スタイルを使って非表示だったとしても、インスタンス化されます。
組み込まれている コンテンツのタイプ とは次の通りに定義されます:
-
この要素が
type属性を持ち、その属性の値がプラグインがサポートしているタイプなら、そのtype属性の値がコンテンツのタイプです。 -
そうでなければ、指定されたリソース(リダイレクトがあれば、リダイレクト後)の URL の <path> コンポーネントが、プラグインがサポートするパターンに一致すれば、コンテンツのタイプは、そのプラグインが扱うことができるタイプとなります。
例えば、プラグインは、4 文字の文字列 "
.swf" で終わる <path> コンポーネントを伴ったリソースを扱うことができる、と言うことができます。 -
そうでなければ、指定されたリソースが明示的な Content-Type メタデータを持つなら、それがコンテンツのタイプとなります。
-
そうでなければ、そのコンテンツはタイプを持たず、それに対する適切なプラグインが無いということになります。
embed 要素にフォールバック・コンテンツはありません。もしユーザーエージェントが適切なプラグインを見つけられなかったら、ユーザーエージェントはデフォルトのプラグインを使わなければいけません。(このデフォルトは、"未サポートのフォーマット" と言うだけといった簡単なもので構いません。)
リソースが成功裏にフェッチされたかどうか(例:レスポンスコードが 2xx コードまたはそれに相当するものだったかどうか)は、リソースのタイプを決定する際や、リソースをプラグインに渡す際には、無視しなければいけません。
これは、サーバが、エラー応答であってもプラグインのデータを返すことができるようにするためです。(HTTP 500 Internal Server Error コードは、それでもなお、プラグイン・データを含むことができます。)
その名前が XML 互換であり、U+0041 .. U+005A (LATIN CAPITAL LETTER A から LATIN CAPITAL LETTER Z) の範囲にある文字を含まない限り、name, align, hspace, vspace 以外で名前空間がなければ、どんな属性でも embed 要素に指定することができます。これらの属性は、プラグインへのパラメータとしてパースされます。
HTML ドキュメントにあるすべての属性は、自動的に小文字に変換されます。そのため、大文字の制限はこのようなドキュメントには影響しません。
この 4 つの例外は、プラグインへのパラメータ送信だけでなく、副作用を伴うレガシーな属性を排除するためです。
ユーザーエージェントは、使われるプラグインのインスタンスを生成するとき、embed 要素の名前空間がないすべての属性の名前と値をそのプラグインに引き渡すべきです。
embed 要素に対してインスタンスが生成されたプラグインが、スクリプトのインタフェースをサポートするなら、その要素を表す HTMLEmbedElement オブジェクトは、その要素がインスタンス生成されている間、そのインタフェースにアクセスできるようにするべきです。
IDL 属性 src と type はそれぞれ同じ名前のコンテンツ属性を反映しなければいけません。
これは、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/2011/WD-html5-20110525/the-iframe-element.html#the-embed-element