HTML/Tutorials/Aktive Inhalte einbinden

Aus SELFHTML-Wiki
HTML‎ | Tutorials(Weitergeleitet von Seamless)
Wechseln zu: Navigation, Suche

Häufig will man Webseiten mit Drittanbieter-Inhalten anreichern, wie z. B. YouTube-Videos, interaktiven Kartenausschnitten oder Social Media Posts. Dabei kümmert sich ein externer Dienst um Darstellung, Funktion und Datenschutz (z. B. Cookie-Management via Consent).

Auch bei Code-Editoren und Zahlungslösungen im Online-Handel will man eine Cross-Domain-Kommunikation mit klaren Grenzen erreichen, damit der iframe-Inhalt technisch und rechtlich klar getrennt vom Hauptinhalt bleibt.

Dieser Artikel zeigt, wo und wie man heute iframes nützlich und sicher einsetzen kann.


In anderen Bereichen ist der Einsatz von iframes durch bessere Lösungen ersetzt worden:

  • HTML5 audio bzw. video sind wesentlich mächtiger als die hier vorgestellten Elemente, da sie keine zusätzlichen Plugins benötigen und eigene Steuerungselemente für das Abspielen mitbringen.
  • SVG kann ohne einen früher notwendigen Viewer direkt im HTML, als img oder als background-image eingebunden und sogar animiert werden.
  • PDFs werden immer wieder als vermeintlich barrierefrei beworben; Text sollte aber nicht in einem iframe eingebunden, sondern Teil der Webseite sein. So kann es auch von SEO erfasst werden.
  • Flash und im Browser ausgeführte Java-Applets werden aus Sicherheitsbedenken nicht mehr unterstützt.

iframe

Das iframe-Element (engl. inline frames) wird eher zum Einbinden von Dokumenten und anderen Web-Seiten verwendet. Eingebettete Frames sind (ähnlich wie Grafiken) Bereiche innerhalb einer HTML-Datei, in denen fremde Quellen – vor allem andere HTML-Dateien – angezeigt werden können.[1][2]

Folgende Attribute sind möglich:

  • name: Name des iframes
  • sandbox: lässt den iframe in einer sandbox mit erhöhten Sicherheitsrestriktionen laufen.
  • src: Quelle
  • srcdoc: ermöglicht die Angabe von HTML, das dann als Inhalt des iframes dargestellt wird
  • height: Höhe in CSS-Pixel
  • width: Breite in CSS-Pixel
    Beachten Sie: In HTML5 ist die Angabe von Prozentwerten verpönt; Formatierungen sollten über das CSS erfolgen.

Die Default-Stylesheets der Browser verwenden für iframes ohne Breitenangaben 300 x 150px - so entstehen für die oft längeren Wikiseiten Scrollbalken. Dies lässt sich mit CSS teilweise umgehen:

Beispiel
iframe { 
   width: 80%; 
   height: 80%; 
   resize: both; 
}

Eine Prozentangabe im CSS überschreibt die Werte des width-Attributs. Durch resize kann der iframe in beide Richtungen vergrößert werden.

Einbinden von Dateien mit iframe ansehen …
<iframe src="https://wiki.selfhtml.org/wiki/Startseite" width="900" height="400" name="SELFHTML_in_a_box"> </iframe>
<p>Sie können die eingebettete Seite über den folgenden Verweis aufrufen: 
  <a href="https://wiki.selfhtml.org/wiki/SELFHTML">SELFHTML</a>
</p>

Auf der Beispielseite wird in einem iframe unser SELF-Wiki eingebunden. Im Default-Stylesheet wird das iframe durch eine schwarze, dickere Rahmenlinie gekennzeichnet, die man aber mit CSS border: none; entfernen könnte.

Oft wurde vorgeschlagen, im iframe einen zusätzlichen Alternativtext anzugeben. Dieser wird von modernen Browsern jedoch nicht angezeigt. Deshalb solltest du immer nach dem iframe einen Textabsatz mit einem Alternativtext und einem Link als Fallback notieren.

Beachte: Websites können auf verschiedene Weisen verhindern, dass sie sich in Frames einbinden lassen. Dies äußert sich meist darin, dass das Frame „inhaltslos“ bleibt.

Vorteile einer Sandbox

Wie in der Einführung angesprochen, sollen bestimmte Aktivitäten innerhalb des iframe nach dem Sandkasten-Prinzip so gekapselt werden, dass sie unsere eigene Seite nicht verändern, stören oder in irgendeiner Form beschädigen dürfen. Die Sandbox dient als eine Art Sicherheitskäfig, in der die Anwendung ausgeführt wird.

Das sandbox-Attribut bewirkt, dass die im iframe dargestellte Ressource Aktionen, die potenziell unsicher sind oder den Benutzer verwirren könnten, verhindert werden und explizit freigeschaltet werden müssen. Es handelt sich dabei um eine Mitigation-Technik, die die Auswirkungen einer XSS- oder CSRF-Lücke mindern soll.

iframe mit Youtube-Video in Sandbox ansehen …
  <iframe
    width="850"
    height="600"
    src="https://www.youtube.com/embed/dQw4w9WgXcQ"
    title="Einstieg in HTML"
    sandbox="allow-scripts allow-same-origin allow-presentation"
    allowfullscreen>
  </iframe>

Im Beispiel wird ein Youtube-Video in einem iframe gezeigt.

allow-scripts
Erlaubt dem iframe die Ausführung von JavaScript (wird für YouTube benötigt).
allow-same-origin
Behandelt den iframe-Inhalt so, als käme er aus demselben Ursprung (wird für eingebettete YouTube-Steuerelemente benötigt, damit sie korrekt funktionieren).
allow-presentation
Erlaubt die Videowiedergabe im Vollbild- oder Bild-in-Bild-Modus.


allow-same-origin

Das sandbox-Attribut entfernt die Berechtigung des eingebetteten Dokuments, auf die Daten seiner eigenen Origin zuzugreifen. Bettet eine beliebige Seite ein Dokument von example.com/foo ein, so darf das eingebettete Dokument nicht auf seine eigenen Daten zugreifen (etwa window.localStorage oder document.cookie). Dies kann mit der Angabe von sandbox="allow-same-origin" wieder zurückgenommen werden:
Wird dieses Attribut notiert, so darf das eingebettete Dokument wieder auf die eigenen Daten nach der Same-Origin-Policy zugreifen.

srcdoc - HTML im iframe

Mithilfe des srcdoc-Attributs lässt sich HTML-Code als Inhalt des iframes angeben, dabei hat das srcdoc-Attribut Vorrang vor dem src-Attribut. Bisher ließ sich dies zwar bereits über Data-URLs erreichen, aber hierfür musste das HTML URL-codiert werden. Außerdem lässt sich mithilfe des sandbox-Attribut der enthaltene Code isolieren, da alle Browser, die srcdoc unterstützen, sandbox ebenfalls unterstützen. Browser, die mit srcdoc nichts anfangen können, stellen gar nichts dar – der zu isolierende Inhalt sollte keinesfalls als Fallback im src-Attribut abgelegt werden, da dies die Verwendung des srcdoc-Attributs ad absurdum führen würde.

HTML + CSS + JavaScript Live-Vorschau ansehen …
  <iframe id="preview"></iframe>

  <script>
    const editor = document.getElementById("editor");
    const preview = document.getElementById("preview");

    function updatePreview() {
      preview.srcdoc = editor.value;
    }

    editor.addEventListener("input", updatePreview);

    // Initial render
    updatePreview();
  </script>

Das Beispiel enthält eine textarea, in der das Markup für eine Webseite bereits vorhanden ist und die aber durch den Benutzer weiter verändert werden kann.

Ein Script liest nun diesen Textinhalt aus und setzt ihn in den iframe mit der id preview ein. Bei weiteren Änderungen innerhalbs der textarea wird der Inhalt des iframes laufend aktualisiert -eine Art Mini-Frickl.

iframes seamless einpassen

Es wurde im SELF-Forum immer wieder gefragt, wie man fremde Inhalte in einem iframe so formatieren kann, dass sie sich perfekt in die Seite einpassen. Abgesehen von der Frage, ob dies z. B. bei Bezahlsystemen überhaupt erwünscht ist, gibt es dafür verschiedene Ansätze:

Ein seamless-Attribut sollte den Rahmen um iframes verschwinden lassen. Da das ebensogut auch mit einer passenden CSS-Regel realisiert werden kann, wurde das Attribut wieder obsolet.

randloses iFrame
iframe {
  border: none; 
}

Schwieriger ist es, die Höhe der eingebundenen Inhalte zu ermitteln, um dann die Höhe des iframe so zu verändern, dass keine Scrollbalken benötigt werden.

Dies zeigt unser Folgekapitel:

  • Fenster- und Frameszugriff

Alternative Elemente

Neben dem iframe-Element gibt es weitere - heute jedoch nur selten verwendete - Elemente zum Einbinden aktiver Inhalte.

object

Mit dem object-Element kann man - anders als der Einbindung mit embed und iframe - alternative Inhalte als Fallback zur Verfügung stellen.

Einbinden von Dateien mit object ansehen …
<object data="https://wiki.selfhtml.org/local/Kaleidoskop.svg" type="image/svg+xml"> <param name="src" value="/local/Kaleidoskop.svg"> <!-- Fallback --> <img src="kaleidoskop.gif" alt="Blick in ein Kaleidoskop"> </object>

Browser, die keine SVG-Grafiken darstellen können, zeigen stattdessen eine andere Grafik. Falls auch diese Grafik nicht angezeigt werden kann oder soll, steht der Alternativtext dieser Grafik zur Verfügung.

Dabei wird in diesem Beispiel mit …

  • data: der URI angegeben, der den Ort der Quelle bestimmt
  • type: MIME-Typ des Plugins, bzw. des eingebundenen Dokuments

angegeben

Weiterhin können Parameter durch das param-Element angegeben werden. Beim Attribut name wird der Namen; bei value der gewünschte Wert des Parameters angegeben, der dem Plugin übergeben werden soll.

embed

Daneben existiert das embed-Element, das lange nicht zum HTML-Standard gehörte und erst mit HTML5 offiziell akzeptiert wurde.

Einbinden von Dateien mit embed
<embed width="600" height="400" src="Beispiel.pdf type="application/pdf">
Beachte: PDFs sind von Suchmaschinen lesbar, haben aber ihre eigene Formatierung. Oft sieht es besser aus, wenn der Text im normalen HTML-Markup integriert ist.

Siehe auch

  • Einstieg in Leaflet

    Leaflet ist eine API, um Karten per iframe in Webseiten einzubinden
    SELF-Blog-Artikel von Jürgen Berkemeier

  • Fenster- und Frameszugriff



Weblinks

  1. Spezifikation (WHATWG): The iframe-Element
  2. MDN: iframe