# Frame (HTML)

Als Frame wird ein Teilbereich einer HTML-Seite bezeichnet, in dem eine andere HTML-Seite transkludiert werden kann. Das einzelne Segment wird dabei als Frame (dt. Rahmen) bezeichnet, die Definition aller Frames als Frameset.
Die Frame-Technik wurde von Netscape im Navigator 2.0 eingeführt und wird heute noch von den meisten Browsern unterstützt. Das W3C hatte Framesets in den Versionen HTML 4.0 und XHTML 1.0 standardisiert.
In HTML5 wurde die Frame-Technik nicht übernommen.

## Verwendung

Viele Experten aus dem Bereich der Gebrauchstauglichkeit (usability) raten vom Einsatz von Frames ab.

## Vorteile

Ein Vorteil ist die Möglichkeit zur parallelen Darstellung mehrerer Einzeldokumente. Dadurch lässt sich die vom Webserver zum Webbrowser übertragene Datenmenge reduzieren und es wird eine Modularisierung einer Website ohne serverseitige Techniken möglich. So lässt sich beispielsweise die Navigation zentral in einem HTML-Dokument verwalten und muss nicht auf jeder neuen Seite eingefügt werden.
Ein weiterer Vorteil ist, dass nur der jeweils gerade aktuelle Frame gescrollt wird, während andere Frames davon unbeeinflusst sind. So lässt sich beispielsweise ein Inhaltsframe scrollen, während die Navigation und andere wichtige Bereiche im jeweils eigenen Frame nicht mit scrollen.
Vorteilhaft ist zudem, dass sich über Frames problemlos Inhalte aus unterschiedlichen Quellen bzw. aus verschiedenen Webanwendungen miteinander kombinieren lassen. So könnten Ergebnisse einer Webanwendung in einem Frame in einem anderen Frame angezeigt werden.

## Nachteile
### In HTML 5 nicht mehr enthalten

Das W3C hat die Frame-Technik in HTML5 nicht übernommen. Vor der weiteren Verwendung wird gewarnt:
   „Unerwünscht - Dieses Feature wurde aus den Webstandards entfernt. Obwohl manche Browser es immer noch unterstützen, wird es zukünftig wegfallen. Es sollte daher nicht mehr in alten oder neuen Projekten verwendet werden. Webseiten oder Webapps, die es benutzen, funktionieren möglicherweise irgendwann nicht mehr korrekt.“

### Adressierung

Normale HTML-Seiten haben nur eine Adresse, mit der sie erreichbar sind. Frames bestehen jedoch aus mehreren Unterseiten, wobei im Browser meist die Adresse der Framedefinition (des Framesets) angezeigt wird, die sich bei dem Wechsel auf eine andere Unterseite in der Regel nicht ändert. Möchte jemand eine bestimmte Unterseite verlinken, ein Lesezeichen darauf setzen oder in einer E-Mail angeben, so steht er in der Regel vor einem Dilemma. Verlinkt er das Frameset, wird die im Frameset definierte Startseite statt der gewünschten Unterseite geladen, gibt er die direkte Adresse an, so fehlen die übrigen Komponenten der Seite wie etwa die Navigation. Gerade für technisch wenig versierte Benutzer, die an das Grundprinzip „Eine Adresse = Eine Seite“ gewöhnt sind, ist dies verwirrend.
Dieses Problem kann jedoch teilweise mittels JavaScript umgangen werden, da JavaScripts erkennen können, ob eine Seite im Frameset geladen ist oder nicht, und so entsprechend reagieren können, um das Frameset nachzuladen.

### Erfassung durch Suchmaschinen

Auch Suchmaschinen haben mit Frames Probleme. Zwar erfassen sie meist die Inhalte auf Frameunterseiten und verlinken diese, die Auffindbarkeit der Startseite des Webangebots leidet allerdings. Dies rührt daher, dass Frameset-Dokumente keinen relevanten Inhalt besitzen.

### Barrierefreiheit

Insbesondere beim Einsatz von Screenreadern zum Auslesen der vom Browser dargestellten Inhalte sind Frames ein Problem, da die Nutzer sich zwischen den einzelnen Frames nur anhand deren Bezeichnung orientieren können. Ältere Screenreader, zum Beispiel solche, die nur mit dem Browser Lynx oder anderen Textbrowsern zusammenarbeiten, konnten Frames nicht darstellen, modernere Programme können mit den meisten aktuellen Browsern zusammenarbeiten, so dass Frames technisch keine Hürde mehr sind.

### Zueigenmachen von fremden Webseiten

Es ist möglich, eine fremde Webseite in das eigene Frameset einzubinden. Das wird allerdings von dem betroffenen Webseitenbetreiber meist nicht gerne gesehen. Hierzu gibt es bereits mehrere Gerichtsurteile, so sah das Landgericht Düsseldorf das Framing von fremden Seiten als zulässig an, das Landesgericht in Steyr (Österreich) wiederum das Einbinden fremder Seiten in das eigene Frameset als Wettbewerbswidrigkeit. Beim Inlineframing ist nach Ansicht des Kammergerichts auf fremde Urheber- und Leistungsschutzrechte zu achten, weshalb es beispielsweise nicht ohne weiteres zulässig ist, fremdes Kartenmaterial im Wege des Framing einzubinden. Soweit das Framing zu einem erhöhten Datentransfervolumen führt, kommt eine Haftung unter dem Gesichtspunkt des Eingriffs in das Recht des eingerichteten und ausgeübten Gewerbebetriebes in Frage. Der Bundesgerichtshof legte im Mai 2013 die Frage zur urheberrechtlichen Zulässigkeit des Framing dem Gerichtshof der Europäischen Union zur Entscheidung vor.
Verhindern kann man das Einbinden der eigenen Webseite in ein Frameset durch JavaScript, ähnlich wie bei dem Adressierungsproblem. Derartige JavaScripte werden auch als Framekiller oder Framebuster bezeichnet. Beispiel-Quelltext:
Alternativ kann im Webserver der Response Header X-Frame-Options gesetzt werden, der im Browser dafür sorgt, dass die Webseite gar nicht in einem Frameset angezeigt (X-Frame-Options "DENY") bzw. nur in einem Frameset, das vom gleichen Webserver ausgeliefert wurde (X-Frame-Options "SAMEORIGIN"). Bei Shared Hostern, bei denen ein Zugriff auf die Webserver-Konfiguration nicht möglich ist, lässt sich – insofern diese Apache als Webserver-Software verwenden – der Response Header auch in der .htaccess Datei setzen ("Header append X-FRAME-OPTIONS DENY").

## Alternativen

Eine Alternative zu HTML-Frames sind die nach ähnlichem Prinzip funktionierenden Inlineframes.
Mit verschiedenen Techniken lassen sich heute alle Vorteile von Frames auch anders realisieren. Serverseitige Techniken, etwa Server Side Includes, können dazu dienen, dass Seitenteile wie das Menü zentral an einer Stelle gepflegt, aber auf beliebig vielen Unterseiten eingebunden werden können. Mit Cascading Style Sheets können Teile eines HTML-Dokuments scrollbar gestaltet werden. Mittels Ajax ist es möglich, Daten vom Server nachzuladen und die Seite damit umzugestalten.