HTML5 definiert mehrere eingebettete Inhaltselemente, die aus der Vogelperspektive dem Punkt der Ähnlichkeit weitgehend ähnlich zu sein scheinen.
Was ist der eigentliche Unterschied zwischen iframe
, embed
und object
?
Welche dieser Elemente kann ich verwenden, wenn ich eine HTML-Datei von einer Website eines Drittanbieters einbetten möchte, und wie würden sie sich unterscheiden?
Antworten:
<iframe>
Wird hauptsächlich verwendet, um Ressourcen aus anderen Domänen oder Subdomänen einzuschließen, kann jedoch auch verwendet werden, um Inhalte aus derselben Domäne einzuschließen. Die
<iframe>
Stärke von ist, dass der eingebettete Code "live" ist und mit dem übergeordneten Dokument kommunizieren kann.<embed>
In HTML 5 standardisiert, war es zuvor ein nicht standardmäßiges Tag, das zugegebenermaßen von allen gängigen Browsern implementiert wurde. Verhalten vor HTML 5 kann variieren ...
Wird zum Einbetten von Inhalten für Browser-Plugins verwendet. Ausnahmen bilden SVG und HTML, die je nach Standard unterschiedlich behandelt werden.
Die Details darüber, was mit dem eingebetteten Inhalt gemacht werden kann und was nicht, hängt vom jeweiligen Browser-Plugin ab. Für SVG können Sie jedoch vom übergeordneten Dokument aus auf das eingebettete SVG-Dokument zugreifen.
Innerhalb eines eingebetteten SVG- oder HTML-Dokuments können Sie das übergeordnete Dokument erreichen mit:
Für eingebettetes HTML gibt es keine Möglichkeit, vom eingebetteten Dokument (das ich gefunden habe) auf das eingebettete Dokument zuzugreifen.
<object>
Fazit
Wenn Sie SVG oder etwas Statisches nicht einbetten, verwenden Sie es wahrscheinlich am besten
<iframe>
. Um SVG einzuschließen, verwenden Sie<embed>
(wenn ich mich richtig erinnere<object>
lassen Sie kein Skript †). Ehrlich gesagt weiß ich nicht, warum Sie es verwenden würden, es<object>
sei denn für ältere Browser oder Flash (mit denen ich nicht arbeite).† Wie in den Kommentaren unten ausgeführt; Skripte in
<object>
werden ausgeführt, aber die übergeordneten und untergeordneten Kontexte können nicht direkt kommunizieren. Mit<embed>
können Sie den Kontext des Kindes vom Elternteil abrufen und umgekehrt. Dies bedeutet, dass Sie Skripte im übergeordneten Element verwenden können, um das untergeordnete Element usw. zu bearbeiten. Dieser Teil ist nicht möglich<object>
oder<iframe>
Sie müssten stattdessen einen anderen Mechanismus einrichten, z. B. die JavaScript-API postMessage .quelle
embed
ist ideal, um den Besucher dazu zu bringen, einer Weiterleitungskette zu folgen, die von einer Website stammt, die das Framing blockiert. (Wir verwenden es, um die<object>
werden ausgeführt, aber es ist nicht möglich (oder ich habe es nicht geschafft), von der übergeordneten Seite aus auf den Kontext des Objekts zuzugreifen. Es werden also "interne" Skripte ausgeführt, "externe" Skripte können aus Sicht des Objekts nicht mit dem Objektkontext kommunizieren.<iframe />
der richtige Weg ist. Der ganze Punkt des Beitrags ist, dass sie alle unterschiedlich sind.<embed>
befindet sich noch in der Spezifikation: w3.org/TR/html5/embedded-content-0.html#the-embed-element , daher ist es gerechtfertigt, dies zu erwähnen. Ich finde es auch mehr als ein bisschen lustig, dass Sie argumentieren, dass<embed>
es veraltet ist und Java-Applets im nächsten Satz erwähnen :)Ein Grund für die Verwendung von
object
overiframe
besteht darin, dass das Objekt den eingebetteten Inhalt an die Objektabmessungen anpasst. Am bemerkenswertesten auf Safari in iPhone 4s, wo die Bildschirmbreite320px
und der HTML-Code der eingebetteten URL möglicherweise größere Abmessungen festlegen.quelle
Ein weiterer Grund für den Einsatz
object
über iframe ist , dassobject
Subresourcen (wenn eine<object>
führtHTTP
Anfragen) gelten alspassive/display
in Bezug aufMixed content
, was bedeutet , es ist sicherer , wenn Sie müssenMixed content
.Gemischter Inhalt bedeutet, dass, wenn Sie
https
aber Ihre Ressource haben , vonhttp
.Referenz: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
quelle