|
FAQ de.comp.lang.javascript |
|
Bitte verwenden Sie als Einstiegsadresse in diese FAQ die
Homepage der Newsgroup de.comp.lang.javascript.
Der Aufenthaltsort dieser Seiten hier kann sich ohne Vorwarnung ändern.
Um diese Antwort gab es in der Newsgroup im Februar 2001 ein wenig Verwirrung (s. news:96msfu$7he$1@kohl.informatik.uni-bremen.de ff - Subjekt:"Variablenverfügbarkeit im dynamisch erzeugten Frameset"). Im Ergebnis steht hier wieder die Idee von Michael Buschbeck.
Es gibt verschiedene Möglichkeiten, die Existenz von Frames festzustellen. Der unten beschriebene Ansatz ist dann geeignet, wenn Du verhindern möchtest, daß Deine Seite oder Dein Frameset als Teil eines fremden Framesets angezeigt wird.
Das Prinzip der folgenden Lösung ist einfach:
Man stellt fest, ob das eigene Fenster identisch ist mit dem Fenster auf der obersten Hierarchie-Ebene:
function standalone() { return (self == top); }
Wenn das eigene Fenster (self) nicht identisch mit dem Fenster auf der obersten Hierarchie-Ebene (top) ist, dann steht Deine Seite offensichtlich nicht alleine da. Die Funktion standalone() gibt dann den Wert false zurück:
Fragt sich nur, wie man reagiert, wenn die Seite wider Erwarten doch in einem Frameset angezeigt wird. Die eleganteste Lösung ist, das fremde Frameset aus dem Browserfenster zu schmeißen und die eigene Seite im Vollbild zu laden. Voilà:
if (!standalone()) top.location.href = self.location.href;
Damit der Benutzer beim Zurückblättern durch die History aber nicht deswegen auf Deiner Seite hängenbleibt, kannst Du dafür sorgen, daß zumindest mit JavaScript 1.1 beim Neuladen Deiner Seite der letzte History-Eintrag überschrieben wird:
<script language="JavaScript"> function ersetzen(adresse) { top.location.href = adresse; // funktioniert immer } </script> <script language="JavaScript1.1"> function ersetzen(adresse) { top.location.replace(adresse); // überschreibt History-Eintrag } </script> <script> if (!standalone()) ersetzen(self.location.href); </script>
Das ist der umgekehrte Fall:
Wenn das eigene Fenster (self)
identisch ist mit dem Fenster auf der obersten Hierarchie-Ebene (top),
dann steht die Seite offensichtlich alleine da, also lädt man das Frameset:
if (standalone()) ersetzen('http://meineDomain.de/meinFrameset.html');
Diese Seite ist Teil der de.comp.lang.javascript FAQ. Die Einstiegsadresse lautet http://www.dcljs.de/.
Dieser Text wurde erstellt von Michael Buschbeck (©) und zuletzt bearbeitet von Christine Kühnel.
© S. Mintert, Ch. Kühnel
______ letzte Änderung: 01.01.2002 ______
Original-URL dieser Datei: http://dcljs.de/faq/antwort.php?Antwort=fenster_inframe