![]() |
|
Javascript - Framesets sprengen oder nachladenFramesets sprengen <script type="text/javascript">
if (parent.frames.length > 0){ self.parent.location = document.location; } </script> Mit "parent.frames.length" wird zunächst die Anzahl der Frames ermittelt. Bei einer No-Frame Seite ist das gewöhnlich "0". Doch aufgepasst! Werbung oder Banner, wie zum Beispiel auf dieser Seite, werden nicht selten direkt oder indirekt über Inline Frames eingebunden und erhöhen damit die Zahl der Frames einer Internetseite. Daher empfiehlt es sich, die Anzahl vorher mit "alert (parent.frames.length)" zu überprüfen und bei einem Wert größer als 0 diesen entsprechend anzupassen. Wird die Datei nun in irgendein Frameset geladen, dann erhöht sich der eingetragene Wert um mindestens 1 und die Bedingung für die Änderung der URI tritt in Kraft. Statt des Framesets (self.parent.location) wird nun die eigene Datei dirket angezeigt (document.location). Sicherheitsprobleme Framesets nachladen <script type="text/javascript">
if (!top.istda){ top.location.href = "http://www.Ihre-domain.de/frameset.html?" +document.location.pathname; } </script> Es empfiehlt sich dringend, diesen Code in einer zentralen Javascript-Datei auszulagern, auf die die einzelnen Dateien zugreifen können. Denn sollte sich der Ort der Framesetdatei einmal ändern, brauchen nicht sämtliche Dateien wieder bearbeitet zu werden. In diesem Codeschnipsel wird überprüft, ob die Variable "istda", die in der Framesetdatei ("top" - Ebene) eingeführt wird, vorhanden ist. Ist sie vorhanden, ist auch das Frameset bereits geladen. Wenn nicht, wird es über die Anweisung (top.location.href) nachgeladen. Durch ein Fragezeichen getrennt wird noch der Pfad der aktuellen Datei übermittelt (document.location.pathname), denn die soll ja im nächsten Schritt im Frameset angezeigt werden. Die Frameset-Datei wiederum wird im "<head>" Bereich um folgendes Javascript erweitert: <script type="text/javascript">
var istda = 1; function pruefen(){ if ((window.location.search) && (istda == 1)){ var basis = window.location.href.split ("?"); self.inhalt.location.href = basis[1]; istda++; }} </script> Zunächst wird die Variable "istda" eingeführt, die in den Einzeldateien abgefragt wird. In der Funktion "pruefen()" wird über "window.location.search" geprüft, ob die gerade aufgerufene Datei in ihrer URI ein "?" enthält. Wenn nicht, wird das Frameset ganz normal aufgerufen, wenn doch, dann muss eine andere Datei im Frameset nachgeladen werden. Die zweite Bedingung für die Schleife "istda == 1" stellt sicher, dass die Prüfung nur einmal stattfindet. Dann wird die URI am "?" zerlegt [window.location.href.split ("?")] und im Array "basis" abgespeichert. Interessant ist nur der Teil, der hinter dem "?" steht, also "basis[1]", denn das ist die Adresse der nachzuladenden Datei. Dann wird die Anfangsvariable "istda" noch um eins hochgezählt, damit diese Schleife nur einmal durchlaufen wird. Aufgerufen wird die Funktion "pruefen()" mit onload="pruefen(); return true;" in der Frameanweisung für den Frame, in dem die nachzuladende Datei angezeigt werden soll. In unserem Beispiel ist das der "inhalt" Frame. <frameset cols="150,*">
<frame src="navigation.html" name="navigation"> <frame src="inhalt.html" name="inhalt" onload="pruefen(); return true;"> </frameset> Der "onload" Befehl startet die Funktion "pruefen()", die ihrerseits nach Durchlaufen den Wahrheitswert "true" zurückgibt und das Laden der neuen Datei veranlasst. Da dem Frameset mit "document.location.pathname" nur der lokale Pfad der nachzuladenden Datei übergeben wird, funktioniert diese Variante auch nur, wenn Framesetdatei und Datei unter derselben Domain angesiedelt sind. Andernfalls müsste mit "document.location.href" der absolute Pfad der Datei übermittelt werden.
|