![]() |
Datei dynamisch in Frameset laden |
|
| |
| E-Mail: | |
|---|---|
| Homepage-URL: |
Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!
Ein Manko bei der Verwendung von Framesets besteht in der unbefriedigenden direkten Verweisbarkeit von Frameseiten durch andere Publikationen. Diese Problematik wird in SELFHTML bei den
Tipps zum Umgang mit Frames behandelt.
Ein Beispiel: Unter
http://www.morshausen.de/index.htm erreicht man die Homepage des schönen Dorfes Morshausen im Hunsrück. Diese ist als Frameset realisiert. So können Besucher über eine Menüleiste beispielsweise eine Seite mit Nachrichten aufrufen, die in dem Hauptframe angezeigt wird. Referenziert man diese Seite direkt, beispielsweise indem man in die Adresszeile des Browsers
http://www.morshausen.de/news/news.htm eingibt, so wird die Nachrichtenseite ohne die umgebenden Frames angezeigt. Dies ist nicht nur optisch unerwünscht - der beispielsweise über eine Suchmaschine auf diese Seite gestoßene Leser hat nun nicht die Möglichkeit, über den Navigationsframe auf andere Angebote der Homepage zuzugreifen.
Mit ein paar JavaScript-Zeilen läßt sich dieser ungewünschte Effekt beheben. Im ersten Schritt muß man dazu in jeder Frameseite ein Script integrieren, das nach dem Laden der Seite überprüft, ob auch ein Frameset existiert. Falls nicht, wird das Frameset nachgeladen. Gleichzeitig wird dem Frameset mitgeteilt, von welcher Seite aus das Nachladen erfolgt ist.
<head>
...
<SCRIPT language="JavaScript">
<!--
function checkFrameset() {
if(!parent.xyzVerweisframe)
location.href="http://www.xy.de/unterverzeichnisXY/index.htm?" + location.pathname;
}
//-->
</SCRIPT>
</head>
<body onLoad='checkFrameset()'>
...
Mit if(!parent.xyzVerweisframe) wird überprüft, ob ein Frame namens 'xyzVerweisframe' existiert. Setzen Sie anstelle von xyzVerweisframe den Namen eines Frames, den Sie zur Identifikation des Framesets auserkoren haben. Ist dieser nicht vorhanden, wird zur Frameseite verzweigt. Mit location.href wird die neue URL festgelegt. Als Ziel geben Sie die URL der Seite an, die das Frameset enthält, gefolgt von einem Fragezeichen. An dieses Fragezeichen wird mit location.pathname der Pfad der aktuellen Seite angehängt. Dadurch wird es möglich, daß im Anschluß die aktuelle Seite wieder im Frameset angezeigt werden kann.
Die Seite mit der Definition des Framesets enthält ihrerseits eine Funktion, die nach dem Laden gestartet wird. Diese überprüft, ob der Verweis, über den das Frameset adressiert wurde, eine mit einem Fragezeichen angehängte Zeichenkette enthält. Wenn ja, dann wird diese Zeichenkette (der Pfad der aufrufenden Frameseite) extrahiert und die Frameseite in den entsprechenden Frame geladen.
<head>
...
<SCRIPT language="JavaScript">
<!--
function checkFramecall() {
var Adressanhang=location.search;
if(Adressanhang)
frames.xyzHauptframe.location.href=Adressanhang.substring(1,Adressanhang.length);
}
//-->
</SCRIPT>
</head>
<frameset cols="60,*" onLoad="checkFramecall()">
<frame name="xyzVerweisframe" src="links.htm">
<frame name="xyzHauptframe" src="start.htm">
</frameset>
...
Das Objekt location enthält in der Eigenschaft location.search einen eventuell mit Fragezeichen an die Adresszeile angehängten String. Wenn dieser nicht leer ist, also den Pfad der aufrufenden Frameseite enthält, wird diese mit frames.xyzHauptframe.location.href=Adressanhang.substring(1,Adressanhang.length) in den Frame namens 'xyzHauptframe' geladen. Die Anwendung der Funktion substr() am Ende der Zeile entfernt das Fragezeichen am Anfang des String.