Multimediakurs Leinfelder: Modul 11 - Anlagen: Forced Frames und Vermeidung von Webnapping |
(© copyright) Letzte Änderungen: |
Diese Anlage ergänzt Anlage 13, in der Sie gelernt haben, wie Ihre Seiten immer im korrekten Frameset erscheinen, selbst wenn eine Suchmaschine nur eine einzelne Frameseite herausgesucht hat. Dies verhindert auch den Einbau Ihrer Seiten in andere Frames.
Andererseits ist das generelle Forcieren des richtigen Frameset in manchen Fällen nicht sinnvoll. Stellen Sie sich vor, Sie wollen diese Seite aus dem Kurs zum Nachlesen abspeichern. Hätten wir ein ForceFrame-Skript eingebaut, würde dieses bei jedem offline-Aufruf der Seiten den zugehörigen Frameset suchen, aber wegen fehlender Online-Verbindung nicht finden. Es gibt dann eine entsprechende Fehlermeldung.
(In Anlage 13 bzw. 13 b haben wir bereits mit benutzerdefinierten Force-Frames gearbeitet; hier soll eine noch vereinfachte Rezeptur vorgestellt werden)
Vielleicht will der Nutzer auch der Übersichtlichkeit halber eine normalerweise innerhalb eines Framesets erscheinende Seite in ein neues Browserfenster laden. Sofort würde ein ForceFrame-Skript wieder den Frameset hinzuladen.
Andererseits wollen wir erreichen, dass diese Seite korrekt dem Multimediakurs zugeordnet wird, auch wenn sie einzeln (z.B. via Suchmaschine) aufgerufen wurde. Wie können wir dies erreichen?
Möglichkeit 1: Jeweils oben auf der Seite gibt es einen Link (siehe oben entsprechenden Link: "Klicken Sie hier"). Hier wird die Eingangsseite des Kurses, also das Eingangsframeset aufgerufen (sicherheitshalber ist target="_top" angegeben, damit man nicht ggf. in einem anderen Frame gefangen bleibt). Vorteil: sehr einfache Lösung, mit folgendem Trivialcode:
<a href="http://www.palaeo.de/multimediakurs/" target="_top">Klicken Sie hier</a>
Sinnvoll ist es den absoluten Link anzugeben, damit auch bei offline geladener Seite ggf. die Heimatseite auffindbar ist.
Dieses Vorgehen hat jedoch einen entscheidenden Nachteil: die aufgerufene Seite verschwindet, es erscheint der Eingangsframeset, mit allen dort definierten Eingangsframes. Man müsste sich also wieder umständlich zu dieser Seite durchklicken.
Möglichkeit 2: wir verwenden das ForceFrame-Skript, lassen es aber nicht automatisch, sondern benutzergesteuert aufrufen und geben noch ein paar Hinweise, was gerade passiert..
Zuerst das Beispiel
Die Skripte:
Wir benötigen wie im Standardbeispiel wiederum zwei verschiedene Skripte, eines für die jeweiligen Einzelseiten sowie ein weiteres für die Frameset-Seite (in unserem Beispiel also die Index-Seite). Diese sind um Alert-Versionen ergänzt.
Hinweis: Diese Anlage macht Sie nicht mit der Syntax von JavaScript vertraut. Sie sollten wenigstens den Anfangsmodul von Modul 7 unseres JavaScript-Kurses durchgesehen haben. Wenn Sie die Sytax verstehen wollen, sollten Sie den gesamten Modul 7 durchgearbeitet haben, dies ist jedoch zur Verwendung der Skripte nicht notwendig.
Das Skript im Header dieser Seite finden Sie nachstehend. Ein paar Erläuterungen habe ich hinzugefügt; diese können ggf. gelöscht werden.
<script language="JavaScript" name="forceframe">
<!--
// zuerst werden die Inhalte für die beiden möglichen Hinweise als Variablen definiert
var message1 = "The menu should be already visible at the left side of the browser window!";
var message2 = "You should see this page within a navigation frameset. We'll fix this now for you!";
// hier die bereits bekannte checkFrameset-Funktion
// gesucht wird diesmal nach Nichtvorhandensein eines Frames mit Namen frleft
function checkFrameset() {
if(!parent.frleft)
{
/* ist diese frleft-Frame nicht vorhanden, wird zuerst alert mit Message 2 ausgegeben,
danach wird zur Frameset-Seite umgeleitet und dabei der Pfad zur aktuellen Seite als Suchabfrage mitgegeben */
alert(message2);
location.href="http://www.palaeo.de/multimediakurs/index.html?" + location.pathname;
}
/* falls der Frame namens frleft doch vorhanden war, wird ein Alert mit message1 ausgegeben */
else
{
alert(message1);
}
}
//-->
</script>
Das Skript wird nun nicht via onload-handler, sondern via Linkklick ausgelöst mit:
<a href="javascript:checkFrameset()">no menu?</a>
Das Skript im Header des Framesets (also hier der Eingangsseite zu www.palaeo.de/multimediakurs) ist analog zum Beispiel in Anlage 13, dies gilt auch für die onload-Auslösung im Frameset-Tag, es heißt also:
<script language="JavaScript">
<!--
function checkFramecall() {
var Adressanhang=location.search;
if(Adressanhang)
frames.frmain.location.href=Adressanhang.substring(1, Adressanhang.length);
}
//-->
</script>
Ausgelöst wird es während des Ladens des Framesets mit:
<frameset rows="107,*" onload="checkFramecall()">
Das war's.
Nach meiner Erfahrung funktioniert das Arbeiten mit parent-Angaben und absoluten Links auch unter Stealth-Redirect-Situationen (vgl. Troubleshooting, Anlage 13b)
© R. Leinfelder und Paläontologie München, letzte Änderung