Frameset Scripte


Javascript – Framesets sprengen oder nachladen

Framesets sprengen
Framesets werden häufig dazu genutzt, um sich Fremdinhalte zu eigen zu machen und sie – häufig ungefragt – auf der eigenen Webseite in ein Frameset zu laden, drumherum noch Werbung zu platzieren und so aus fremder Arbeit Profit zu schlagen. Wer nicht möchte, dass seine Dateien, die selber nicht in einem Frameset laufen, ungefragt in fremden Framesets angezeigt werden, kann sie mit einem kleinen Javascript schützen.

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
Nun stellt sich vielleicht die Frage, warum man nicht einfach gleich über „top.location.host“ die Domain, auf dem die Frameset-Datei liegt, ermittelt und dann mit der eigenen Domain vergleicht. Das wäre die eleganteste Lösung, doch aus Sicherheitsgründen lassen die Browser einen Zugriff auf die oberste Fensterebene nicht zu, sofern sie nicht auf demselben Server liegt.

Framesets nachladen
Wer mit Framesets arbeitet, kennt das Problem, dass Suchmaschinen nicht das komplette Frameset einer bestimmten Datei indizieren können, sondern immer nur das Start-Frameset und dann jeweils die einzelnen Elemente. Bei einem Seitenaufruf stehen diese dann meist ohne Navigation, Werbung oder andere wichtige Seitenelemente allein da. In diesem Fall kann man über ein Javascript das komplette Frameset für die gewünschte Datei nachladen. Die Codierung erfolgt dabei in zwei Stufen. Zunächst wird jede einzelne Datei, für die bei Bedarf das komplette Frameset nachgeladen werden soll, mit folgendem Javascript versehen:

<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.