Kakao & KekseDie Verwirrung


Tips & Tricks: Sinnvoller Umgang mit Frames



Frames, so nützlich sie auch sind, können sie doch manchmal etwas störrisch sein. Mit JavaScript haben Sie die Möglichkeit, Frames sinnvoll zu ergänzen und Schwachstellen zu beheben. JavaScript ermöglicht wesentlich mehr als verschiedene Frames gleichzeitig zu ändern. Wir erinnern uns:


function frame_test { parent.frame_name.document.location.href ='1.html' parent.frame_name2.document.location.href ='2.html' parent.frame_name3.document.location.href ='3.html' }


Diese Funktion würde nun in einem drei geteilten Frame, alle Fenster gleichzeitig ändern (s. Mehrere Fenster gleichzeitig ansteuern). Beachten Sie bei diesem Beispiel, daß sich hier die Syntax gegenüber unserem älteren Beispiel geändert hat. Früher reichte es aus, wenn man parent.frame_name.location notierte. Damit dieses Skript auch unter dem MSIE einwandfrei funktioniert (ab v3.x), müssen Sie parent.frame_name.location.href notieren.

Oft freut man sich, wenn seine Seiten von anderen Angeboten "verlinkt" werden. Weniger erfreut wird man sein, wenn diese Verweise die eigene Homepage innerhalb des "fremden" Frames aufbauen. Denken Sie nur: "Die Seite, welche auf Sie verweist besitzt 3 Frames, im Hauptfenster wurde ein Link auf Ihr Angebot plaziert. Ihre Seite wird nun im Hauptfenster angezeigt und besitzt selbst verschiedene Frames .... HILFE!"

Im besten Fall wird nur Ihr Design zerstört. Verwenden Sie jedoch JavaScript-Programme, die in unterschiedlichen Frames eine Aktion ausführen sollen, dann funktioniert u.U. gar nichts mehr (Beispiel hierzu). In jedem Falle wird alles sehr unübersichtlich und die beabsichtigte Wirkung der Seite ist zerstört. Wie kann man sich nun vor diesen unliebsamen Zeitgenossen schützen (die nicht TARGET="_top" verwenden)?

In JavaScript gibt es - wie in jeder Programmiersprache - unzählige Ansätze, ein Problem zu lösen. Ich verwende auf all meinen Seiten mit Frames folgendes Skript:


if (parent.frames.length > 0) { top.location.href=self.document.location.href }


Diese Routine prüft, ob mehr als 0 (also ein Frame) vorhanden ist. Wenn ja, dann wird die darunter stehende Anweisung ausgeführt. Unsere eigene Frameseite befreit sich aus dem fremden Frame und wird somit wieder normal angezeigt (Beispiel hierzu). Wie Sie sehen, dauert es einen kleinen Moment, bis das Skript die Umgebungsbedingungen geprüft hat und die Routine ausgeführt wird.

In unserem obigen Beispiel haben wir den eigenen Frame aus einem fremden Frame befreit. Falls Sie nun eine normale Seite aus einem Frame befreien möchten, können Sie die gleiche Routine verwenden. Eine weitere Möglichkeit bietet dieses Skript (ebenfalls für beide Vorhaben geeignet).


if (self != top) top.location = self.location;


Sie können dieses Skript entweder zwischen den HEAD-Tags anbringen oder mit dem onLoad-eventHandler direkt in das BODY-Tag einbinden (Beispiel hierzu). Welches Skript Sie nun einbinden unterliegt lediglich Ihrem Geschmack :-)

Zu Frames empfiehlt sich eine weitere Routine. Falls jemand auf eine Seite direkt verweist, so wird der Anwender (bei Verwendung von Frames) evtl. nicht mehr auf andere Seiten gelangen. Meist ist es ja so, daß ein Navigationsframe und ein Anzeigeframe verwendet wird. Mann kann nun eine Routine schreiben, die diesen Umstand aufgreift und bei Bedarf den Anwender automatisch auf die richtige Seite führt.


if (window.name != 'inhalt') { TEST=confirm("Diese Seite ist Bestandteil des Framesets von Kakao & Kekse." + "\nKlicken Sie auf OK, um auf diese Seiten zu gelangen."); if (TEST==true) {document.location.href='index.html'}; }


Dieses Skript testet, ob der Fenstername der angesteuerten Seite "inhalt" lautet. Falls dies nicht der Fall ist, wird man mit der Confirm-Methode daruf hingewiesen, daß diese Seite der Bestandteil eines Frames ist und mit Bestätigen von OK auf die richtige Einstiegsseite geleitet (Beispiel hierzu).

Achtung: Falls Sie dieses Beispiel ausführen gelangen Sie mit OK auf die Homepage von Kakao & Kekse und mit Abbrechen auf diese Seite (ohne Frame). In diesem Fall möchten Sie natürlich wieder hierher zurück :-)



Copyright © 1996-1997 Johannes Gamperl. All rights reserved. Alle Rechte vorbehalten.
Kakao & Kekse ist ein Service von J|G Webdesign & Programmierung.