iframe、embed、object要素の違い


180

HTML5はいくつかの埋め込まれたコンテンツ要素を定義します。これらの要素は、鳥瞰図から見ると、ほとんど同じであるという点に非常に似ているようです。

何の間の実際の差であるiframeembedobject

サードパーティのサイトからHTMLファイルを埋め込む場合、これらの要素のどれを使用できますか、またどのように異なりますか?


実際にはまったく同じには見えません。サードパーティのサイトはiframeです。
Kai Qing

:オブジェクトのサブセット対埋め込むstackoverflow.com/questions/1244788/embed-vs-objectオブジェクトのサブセット対、IFRAME:stackoverflow.com/questions/924946/...、ビデオVSオブジェクト対埋め込む:stackoverflow.com/questions/11199048/...
Ciro Santilli郝海东冠状病六四事件法轮功

2
@KaiQingそれらが同一に見えるかどうかはあなたの意見であり、明らかにOPによって共有されません。ああ、ちなみに、それも彼の質問に対する答えではありません。
Malik

1
@マリク-それがコメントである理由です。そして、いいえ、それぞれの定義が明確に違いを概説し、それぞれをいつ使用するかという理由から、同一に見えることは私の意見ではありません。フロントエンドでの表示方法は理論的には同じに見えるかもしれませんが、OPのコンテキストは使用中であり、外観ではなかったと思います。コメントは、サードパーティが要求したとおり、サードパーティにiframeを使用することを示しています。当時は忙しすぎて完全な回答を書き出すことができなかったとしか思えません。
Kai Qing

MDNには、developer.mozilla.org
en

回答:


122

<iframe>

iframe要素は、ネストされたブラウジングコンテキストを表します。HTML 5標準-「<iframe>要素」

主に他のドメインまたはサブドメインのリソースを含めるために使用されますが、同じドメインのコンテンツを含めるためにも使用できます。<iframe>『ライブや親文書と通信できるの強さは、埋め込まれたコードがあるということです』。

<embed>

HTML 5で標準化されていたが、その前は非標準タグであり、確かにすべての主要ブラウザで実装されていた。HTML 5より前の動作はさまざまです...

embed要素は、外部(通常は非HTML)アプリケーションまたはインタラクティブコンテンツの統合ポイントを提供します。(HTML 5標準-" <embed>要素"

ブラウザプラグインのコンテンツを埋め込むために使用されます。これの例外は、標準に従って異なる方法で処理されるSVGとHTMLです。

埋め込みコンテンツで実行できることと実行できないことの詳細は、問題のブラウザープラグイン次第です。ただし、SVGの場合、次のような方法で親から埋め込みSVGドキュメントにアクセスできます。

svg = document.getElementById("parent_id").getSVGDocument();

埋め込まれたSVGまたはHTMLドキュメント内から、次の方法で親に到達できます。

parent = window.parent.document;

埋め込みHTMLの場合、(私が見つけた)親から埋め込みドキュメントにアクセスする方法はありません。

<object>

<object>要素は、ネストされたブラウジング・コンテキストとして、リソースのタイプに応じて、いずれかの画像として扱われ、外部リソースを表すことができ、または外部リソースとしてプラグインによって処理されます。(HTML 5標準-「<object>要素"

結論

SVGや静的なものを埋め込む場合を除いて、おそらく使用するのが最善です<iframe>。SVGを含めるには<embed>(正しく覚えている場合)<object>スクリプトを作成させない†)。正直に言って<object>、古いブラウザやフラッシュ(私が使用していないもの)でない限り、なぜ使用するのかわかりません。

†以下のコメントで指摘されているとおり。のスクリプト<object>は実行されますが、親と子のコンテキストは直接通信できません。を使用<embed>すると、親から子のコンテキストを取得でき、その逆も可能です。これは、親でスクリプトを使用して子を操作できることを意味します。JavaScriptポストメッセージAPIなどの他のメカニズムを設定する必要がある場合、<object>またはそのような<iframe>場所では、その部分は不可能です。


4
embed訪問者がフレーミングをブロックするWebサイトで発生したリダイレクトチェーンをたどるのに理想的です。(フェデレーションログインを開始するために使用します。)
2015年

3
「オブジェクトはスクリプトを許可しない」については当てはまりません。schepers.cc/svg/blendups/embedding.html
Dzenly

@Dzenlyなどで宣言されたスクリプト、およびviaを介してインクルードされたSVG <object>は実行されますが、親ページからオブジェクトのコンテキストを取得することはできません(または管理していません)。したがって、「内部」スクリプトは実行されますが、「外部」スクリプトはオブジェクトの観点からは、オブジェクトコンテキストと通信できません。
Jonas Schubert Erlandsson、2015年

<embed>は本当に時代遅れです。もう何にも使いません。今日、すべての主要なブラウザーは、可能なすべてのプラグインに対してオブジェクトを使用できます。CLSIDの代わりにフラッシュを使用してそのタイプを定義する場合は、すべてのブラウザーで同じように機能します。Javaアプレットを実行することもできます。ただし、私はまだiframeを使用して外部ページを埋め込みます。
バクサウ2017年

2
@Bachsauこれはさまざまなオプションとそれらのトレードオフについての議論であるため、何をすべきかを空白で言うの<iframe />は間違っていると感じます。投稿の要点は、それらはすべて異なるということです。<embed>まだ仕様にあります:w3.org/TR/html5/embedded-content-0.html#the-embed-elementなので、言及することは正当化されます。また、古すぎると主張<embed>し、次の文でJavaアプレットについて言及するのも少しおかしいと思います:)
Jonas Schubert Erlandsson

28

objectover を使用する理由の1つiframeは、オブジェクトが埋め込みコンテンツのサイズをオブジェクトのサイズに合わせて変更することです。iPhone 4sのSafariで最も注目に値するのは320px、画面の幅が広く、埋め込みURLからのHTMLがより大きなサイズを設定する場合があることです。


9
詳細や参考資料を教えてください。それ以外の場合、これはコメントではなく、回答と見なされます。
cnst

9
ええ、でもそれは役に立つコメントです
マリク・A・ルミ

1
これは私のユースケースであり、間違いなく役立つコメントです。
シド

8
iFrame + iPhone = iHeadache
djvg

4

objectiframeで使用するもう1つの理由は、objectサブリソース(リクエストが<object>実行されるときHTTP)がのpassive/display観点から考慮されるMixed contentためですMixed content。つまり、が必要な場合により安全です。

コンテンツが混在しているということhttpsは、リソースはあるがからのものである場合を意味しますhttp

リファレンス:https : //developer.mozilla.org/en-US/docs/Web/Security/Mixed_content


これは、リンクされた記事の現在の読みに基づく場合には当てはまらないようで、アクティブとパッシブの両方の見出しの下にオブジェクトが一覧表示されます。パッシブ:「サブリソース(<対象>を実行するHTTPリクエスト)」/アクティブ:「<オブジェクト>(データ属性)」(後者はあなたが元の質問ごとに別のHTTPリクエストをロードする方法である。
ティム・アベル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.