Framekiller mit JavaScript

von Thomas Salvador.

Frames werden insbesondere dann gerne verwendet, wenn keine "höheren Technologien" verfügbar sind. Es soll an dieser Stelle nicht diskutiert werden, ob man Frames verwenden soll oder nicht, wie es geht steht jedenfalls im Framestutorial.

Ein besonders beliebter Verlinkungsfehler führt dazu, dass externe (also fremde) Sites in das eigene Frameset geladen werden. Und so etwas macht man einfach nicht, ist kurzgesagt böse, wenn man mit dem Besitzer der fremden Site keine spezielle Vereinbarung darüber hat oder er das per se erlaubt.

Was oft nun ein Fehler ist, weil man es nicht besser wußte, wird mitunter natürlich auch in voller Absicht gemacht. In keinem Fall ist es rechtfertigbar.

Glücklicherweise kann man mit Hilfe von JavaScript erkennen, ob man in einem Frameset dargestellt wird und dies auch unterbinden. Da JavaScript zwar nicht bei allen, aber doch bei dem absoluten Großteil aktiv ist, hat man so schon einen netten Blocker.

Der Source

Der Source ist so kurz wie effektiv:

<body onload="if (top!=self) { top.location=self.location; }">

Die Dokumentation

self ist man selbst, also das Dokument.

Ein Browser stellt eine Hierarchie von HTML-Dokumenten dar.

Wird man in einer Nicht-Frame-Site dargestellt, so ist man das einzige Dokument, welches der Browser darstellt und man befindet sich somit auf der obersten Hierarchiestufe top.

Wird man in einer Frame-Site dargestellt, so kann man nicht auf der höchsten Hierarchiestufe sein - es gibt mindestens eine höhere. Dies ist parent (die Vaterstufe), welche das Frameset enthält.

Die Schlußfolgerung daraus ist also: Bin ich auf top, bin ich allein (es kann ja nur einer top sein) und hänge nicht in einem Frameset.

Bin ich es nicht, wurde ich in ein Frameset geladen.

Die Zuweisung top.location=self.location sorgt dafür, das Dokument auf die höchste Hirarchiestufe zu bringen, mit dem Nebeneffekt, dass Frames aufgelöst werden. Es entspricht einer HTML-Referenz

<a href="..." target="_top">...</a>

Wird es so im onload-Attribute des body-Tag genutzt – wie hier gezeigt – wird es nach Übertragung der HTML-Seite ausgeführt. Und Sie brechen zumindest bei den Besuchern aus einem unerwünschten Frameset aus, die JavaScript aktiviert haben. Alternativen sind denkbar.

Meine Empfehlung ist, Framekiller-JS und "Framekiller mit HTML" kombiniert einzusetzen.