Homepage de.comp.lang.javascript
Homepage
de.comp.lang.javascript

FAQ de.comp.lang.javascript

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.
 

 

Wie stelle ich fest, ob meine Seite in einem Frame geladen wurde?
Wie stelle ich fest, ob eine Teildatei meines Framesets einzeln angezeigt wird?

Wie stelle ich fest, ob meine Seite in einem Frame geladen wurde?

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>
 

Wie stelle ich fest, ob eine Teildatei meines Framesets einzeln angezeigt wird?

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');
top

Diese Seite ist Teil der de.comp.lang.javascript FAQ. Die Einstiegsadresse lautet http://www.dcljs.de/. Der Text der Seite wurde erstellt von Michael Buschbeck (©) und zuletzt bearbeitet von Christine Kühnel.

 ______ letzte Änderung: 12/2012 ______ 

 
© S. Mintert, Ch. Kühnel