Multimediakurs Leinfelder: Modul 11 - Anlagen: Forced Frames und Vermeidung von Webnapping

(© copyright)     Letzte Änderungen:07.04.2003


Position innerhalb des Kurses

Modul 11: Anlage 13c: Force-Frame nur benutzerdefiniert aufrufen

von Reinhold Leinfelder [an error occurred while processing this directive]

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

  1. Rufen Sie diesen Frame in einem neuen Fenster auf (entweder mit entsprechender Kontextmenu-Option oder durch Klick hierauf
    Hinweis: dieser Link hat folgenden Code: <a href="#" target="_blank">hierauf</a>, ziemlich läppisch, nicht wahr)

  2. Nun sehen Sie diese Seite heimatlos ohne Frameset. Klicken Sie auf folgenden Link: no menu? Sie werden via Alert darauf hingewiesen, dass Ihnen der Frameset fehlt. Danach wird das ForceFrame-Skript ausgelöst.

  3. Nun ist diese Seite wieder korrekt im Frameset. Probieren Sie es nochmals aus, indem Sie nun auf obigen Link: no menu klicken. Diesmal gibt es einen Hinweis, dass alles ok ist und es passiert nichts weiter.

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 07.04.2003


Inhaltsseite

Anlagenverzeichnis