Framesetmanager

Teil 3 - Das Script im Frameset 2

Zur Erinnerung: Dein Quellcode des Framesets sieht nach der Bearbeitung nach Teil 1 - Das Script im Frameset wie unten gezeigt aus.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<script type="text/javascript">
<!--
if (self.parent.frames.length != 0) self.parent.location="http://www.friedels-home.de/index.html";
var deineVariable = "kjzg";
//-->
</script>
</head>

<frameset cols="30%,*" border="1" frameborder="1" framespacing="1">
<frame src="navigation.htm" name="nav" id="nav">
<frame src="01.htm" name="inhalt" id="inhalt">
</frameset>
</html>

Das Script

function querEinst() {
  var Qseite = location.search;
  if((Qseite.indexOf("http:")!=-1)||(Qseite.indexOf("https:")!=-1)) Qseite = "";
  if(Qseite) {
    frames.inhalt.location.href=Qseite.substring(1,Qseite.length);
  };
};

Dieses Script kann in den vorhandenen Scriptbereich eingebaut werden. Zweck dieses Scripts ist, dafür zu sorgen, dass in den Hauptframe dieses Framesets eine andere Seite als die Startseite geladen wird, wenn in der URL eine Seitenadresse übergeben wurde.

Erklärung

Mit function querEinst() beginnt die Definition der Funktion querEinst. Da keine Parameter übergeben werden müssen, bleibt die violette runde Klammer leer. Wenn diese Funktion aufgerufen wird, wird das ausgeführt, was in der braunen geschweiften Klammer steht. Zuerst wird eine Variable namens Qseite definiert. Sie bekommt den Wert, den location.search zurück gibt. Hier ist search eine Eigenschaft des Objektes location. Das Objekt location ist die aktuelle Adresse. Die Eigenschaft location.search ist der Teil davon, der mit dem ersten vorkommenden Fragezeichen beginnt. In der Variablen Qseite wird also gespeichert, was durch das Script auf der letzten Seite mit der Adresse übergeben wurde. Wenn das Frameset also nicht durch das Script auf der letzten Seite aufgerufen wurde, ist Qseite leer. Ansonsten enthält diese Variable ein Fragezeichen und die URL der Seite, die im Hauptframe dargestellt werden soll. Natürlich kann man auch gleich eine Adresse mit so einem Anhang als Link verwenden oder als Adresse in dem Browser eingeben. Das Script prüft ja nur, ob es so einen Anhang gibt. Wie er erzeugt wurde, spielt keine Rolle. Das birgt die Gefahr, dass mit der Adresse deines Framesets und einer angehängten Adresse einer fremden Seite unerwünschte, fremde Seiten in deinem Frameset dargestellt werden können. Wir müssen also prüfen, ob Qseite eine fremde Adresse enthält. Die fremde Adresse darf nicht weiterverarbeitet werden. Links zu fremden Seiten enthalten natürlich immer "http:" oder "https" am Anfang. Wir prüfen also, ob eine dieser Zeichenfolgen im Anhang enthalten ist. Wenn ja, wird der Wert von Qseite gelöscht. Im nächsten Schritt wird geprüft, ob Qseite etwas enthält. Wenn das der Fall ist, wird ausgeführt, was in der blauen geschweiften Klammer steht. Das Objekt frames enthält die Frames der aktuellen Instanz. Das Unterobjekt frames.inhalt ist also der Frame namens inhalt. Das Unterobjekt dieses Unterobjekts frames.inhalt.location ist also die Adresse des Dokuments im Frame inhalt. frames.inhalt.location wird die Eigenschaft href zugewiesen und die hat den Wert von Qseite.substring(1,Qseite.length). Qseite enthält ja eine Zeichenkette, die aus einem Fragezeichen und der Adresse des Dokuments für frames.inhalt besteht. Qseite.substring() ist ein Teil dieser Zeichenkette. Und zwar der Teil, der in der roten runden Klammer angegeben ist. In der Klammer stehen, getrennt durch ein Komma, der Anfang und das Ende dieses Teils. Da bei sowas die Zählung immer bei 0 beginnt, ist 1 also das 2. Zeichen der Zeichenkette. Qseite.length ist die Länge von Qseite. Dieser Wert ist also die Nummer des letzten Zeichens. Auf diese Weise wurde das Fragezeichen entfernt.

Funktionsaufruf

Natürlich muss auch diese Funktion aufgerufen werden, damit sie etwas bewirkt. Wenn sie aufgerufen wird, muss das Objekt frames.inhalt.location schon existieren damit ihm eine Eigenschaft zugewiesen werden kann. Mit dem Eventhandler onLoad wird sie aufgerufen wenn alle Elemente der Seite geladen sind. Du ergänzt also onLoad="querEinst()" zum Framesettag. Es könnte jetzt, um beim Beispiel zu bleiben, also <frameset cols="30%,*" border="1" frameborder="1" framespacing="1"> onLoad="querEinst()"> lauten.

Ergebnis

Dein Quellcode sieht jetzt so aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<script type="text/javascript">
<!--
if (self.parent.frames.length != 0) self.parent.location="http://www.friedels-home.de/index.html";
var deineVariable = "kjzg";

function querEinst() {
  var Qseite = location.search;
  if((Qseite.indexOf("http:")!=-1)||(Qseite.indexOf("https:")!=-1)) Qseite = "";
  if(Qseite) {
    frames.inhalt.location.href=Qseite.substring(1,Qseite.length);
  };
};
//-->
</script>
</head>

<frameset cols="30%,*" border="1" frameborder="1" framespacing="1" onLoad="querEinst()">
<frame src="navigation.htm" name="nav" id="nav">
<frame src="01.htm" name="inhalt" id="inhalt">
</frameset>
</html>

Um einen Link zu setzen, der direkt auf diese Seite führt, verwende folgende Url: