Multimediakurs Leinfelder: Inhalt/A: Einsteiger/Modul 3 "Frames und iFrames"/Modul 3.1.3 "Verlassen von Frames" |
(© copyright) Letzte Änderungen: |
(3. von 4 Seiten) Verlassen von Frames, Benamung und Ansteuern von Fenstern
Öffnen eines neuen Fensters:
Wir bleiben bei unserem Beispiel. Es könnte ja sein, dass wir auf unserer Webseite auf ein externes Angebot verlinken, z.B. zum Angebot des Rechenzentrums. Wir könnten deshalb einen Link auf Seite inhalt.html im frame frmenu einbauen. Wenn wir nun zum Link wieder target="frhaupt" angeben, wird auch diese Seite wieder im entsprechenden frame geladen. Dies wollen wir aber nicht, da wir ja die Seite nicht erstellt haben und sie auch viel zu klein dargestellt würde.
Wichtiger rechtlicher Hinweis: selbst wenn Sie wollten, dass diese Seite eines anderen Anbieters in ihrem Frame "gefangen" wird, dürfen Sie dies nicht tun. Sie würden damit vortäuschen, dass diese Seite des Rechenzentrums eine Seite Ihres eigenen Angebots ist. Es gibt entsprechende Rechtsurteile, dies derartiges Vorgehen bereits mit empfindlichen Strafen belegt haben. Anfänger, also aufgepasst, damit Ihnen derartiges nicht versehentlich passiert. Lesen Sie deshalb das Nachfolgende genau durch, denn Unwissenheit schützt vor Strafe nicht.
Hinweis: Wenn Sie sich Ihren Domain-Namen bei einem Standard-Provider besorgt haben (z.B. auch palaeo.de, riffe.de, allgemein: meinname.de), könnte es sein, dass Ihrer Links auf externe Webseiten immer noch unter Ihrer Domain (also z.B. meinname.de) aufgerufen werden, d.h. Ihr Domainname in der Adressleiste nicht verschwindet und die aufgerufenen externen Angebote als Fenstertitel noch den Ihrer Domain hatten. Hier handelt es sich um einen sog. versteckten Frame Ihres Providers. Tritt dieses Problem auf, müssen Sie zu allen externen Links den Zusatz target="_top" einfügen. Näheres finden Sie in Anlage 13b). Zum a-tag-Parameter target=_"top" finden Sie unten Näheres.
Wir haben nun in unserem Beispiel zwei Möglichkeiten.
a) wir möchten gerne, dass der Benutzer unser Angebot nicht komplett verlässt, er soll aber die Möglichkeit haben, auf der Seite des Rechenzentrums etwas zu Einstein nachzusehen. Wir öffnen deshalb ein neues Fenster für ihn, in der die verlinkte Seite dann geladen wird. Nach Benutzung kann er diese Seite ja wieder schließen.
Es soll also wie in der folgenden Abbildung (vgl. Sie ggf. mit der entsprechenen Abbildung im früheren Lektionsteil) ablaufen:
Im frmenu kann man auf der Seite inhalt.html den Link Rechenzentrum anklicken, damit wird folgender URL aufgerufen:
<a href="http://www.rechzentr.de/einstein.html" target="extra">Rechenzentrum</a>. Die Seite einstein.html wird damit in einem zusätzlichen Fenster aufgerufen.
(Hinweis: wäre die Seite einstein.html in Ihrem Projektordner zusammen mit den anderen html-Seiten, könnten Sie dies natürlich genauso erreichen, wenn sie als Link-Code folgenden relativen Link schreiben: <a href="einstein.html target="extra">)
Was ist passiert? Der Sourcecode sieht ja aus, wie bei der Framesteuerung? Warum geht da ein neues Fenster auf?
Nun, ein Frameteil oder ein Fenster mit dem Namen "extra" war noch nicht definiert. Deshalb macht der Browser ein Fenster mit entsprechendem Namen auf (der Namen wird nirgendwo angezeigt) und die Seite dorthinein geladen.
Hierzu vier wichtige Merksätze:
Ersetzen des Frame-Browser-Fensters
Wir wollen aber nicht grundsätzlich den Desktop des Websurfers mit lauter neuen Fenstern zupflastern, obige Option sollten Sie recht sparsam verwenden (s.u.)
Meist sinnvoller ist es, das Browserfenster mit den Frames komplett zu ersetzen und die neue externe Seite im gleichen Browserfenster aufzurufen, also etwa folgendermaßen:
Dies erreichen wir mit einem weiteren namensreservierten target, nämlich target="_top"
Der entsprechende Link analog oben sähe also folgendermaßen aus:
<a href="http://www.rechzentr.de/einstein.html" target="_top">Rechenzentrum</a>. Die Seite einstein.html wird damit im selben Browser-Fenster aufgerufen und ersetzt die darin befindlichen Framesets.
Hier mal ein Beispiel. Klicken Sie auf diesen Link
Merke:
Logisches zum Mitdenken:
Nicht in allen Fällen benötigen Sie das definierte Ziel "target="_top", um Frames zu brechen. Unter bestimmten Umständen können Sie dies auch mit beliebigen Target-Namen erreichen. Kommen Sie drauf, wie?
Nun bleiben wir bei unserem früheren, graphisch dargestellten Beispiel. Wir haben z.B. von einer Seite aus ein neues Fenster aufgemacht, z.B. mit Namen "extra" (also via target="extra"). Dort könnte eine Seite geladen werden, die ihrerseits einen Link auf eine Frameseite aufweist. Wird diese Frameseite dann von dort aufgerufen, befindet sie sich, egal, wie auch die eigentlichen Frames heißen, in einem Browserfenster mit definiertem Namen (nämlich "extra"). Geht von der Frameseite ein Link nach draußen, der die Frames brechen soll, könnte man diesem target="extra" hinzugeben, das hätte in diesem Fall den gleichen Effekt wie target="_new", die Frames würden gebrochen? Verstanden? Sie können das Beispiel ja einfach mal nachbasteln.
Normalerweise wird man einen Frame mit target=_top" oder "_parent" brechen und nicht so wie oben im "Kleingedruckten" beschrieben machen. Aber die "take-away-message" des obigen Beispiels ist. folgende: Wird ein Browserfenster vom Nutzer geöffnet (z.B. durch Starten des Browsers oder zusätzlichem Öffnen eines Fensters durch den Websurfer) ist dies undefiniert, d.h. es hat keinen Namen. Wird ein Browserfenster jedoch durch einen mit einem Link verknüpften Target="beliebigerName" geöffnet, hat es wie auch die Einzelframes auf einer Frameseite einen definierten Namen und kann konkret angesteuert werden. Dies wird uns später noch öfters begegnen, wenn wir mit JavaScript arbeiten wollen.
Wichtige Anwendungen und Vereinfachungen:
Tatsächlich braucht man die Ansteuerung von Frames oder zusätzlichen Fenstern sehr häufig, vor allem natürlich bei der Benutzung von Frames. Man muss aber nicht in jedem Fall das Target zu jedem Link schreiben.
Beispiel 1: Alle Links sollen in einen anderen Frame zielen.
Stellen Sie sich wieder unsere schoenframe.html-Seite vor. Links ist im frame mit Name frmenu das Inhaltsverzeichnis (inhalt.html) geladen. Dort sollen - so nehmen wir einmal an - alle Links bis auf eine Ausnahme auf den Frame frhaupt verweisen (also die Links für anfang.html, kap1.html, kap2.html usw. (vielleicht ja sogar bis kap. 20). Nur der ebenfalls auf der Seite inhalt.html befindliche Link zum Rechenzentrum soll die Frames brechen.
Wie vermeiden wir, 20x target="frhaupt" schreiben zu müssen? Ganz einfach. Wir schreiben in den header von inhalt.html folgendes: <base target="frhaupt">
also z.B. unter die Titelzeile (hier rot dargestellt)
<html>
<head>
<title>Inhalt</title>
<base target="frhaupt">
</head>
<body>
blablbla.....
Ganz einfach. Dann kommen alle Links automatisch in dieses Fenster, wir müssen kein Target dazu schreiben. Nur den Link zum Rechenzentrum ergänzen wir durch target="_top", dies ist vorrangig vor dem base target und alles läuft wie wir wollen.
Hinweis: Übrigens habe ich die Linkziele für das Inhaltsverzeichnis dieser Site (im Frame links) genauso definiert.
Beispiel 2: Alle Links sollen in ein neues Fenster zielen.
Stellen Sie sich vor, Sie haben eine Linkliste auf externe Angebote erstellt. Die html-Seite mit den Links könnte z.B. im frame frhaupt geladen sein (oder Sie haben eine Linkliste ohne Frames erstellt). Sie wollen nun, dass die Linkliste stehen bleibt, und vom Nutzer aufgerufene Links in einer zweiten Seite geladen werden.
Sicher kommen Sie selbst drauf, wie das geht. Genau: Wieder ein base target einfügen mit einem beliebigen Target-Namen, z.B. <base target="linkfenster".
Wenn Sie aber ein paar Links auf Ihrer Seite haben, die in einen anderen Frame bzw. ein bereits geöffnetes Browserfenster sollen, dann verwenden Sie bei den entsprechenden links eben den target-Zusatz (also target="frhaupt" bzw. target="_top")
Nicht vergessen!! Irgendwann wird der Websurfer Ihre Seite mit den Frames verlassen wollen. Es muss also wenigstens ein Ausgangslink mit target="_top" vorhanden sein, sonst bekommt der User die Frames nicht mehr los und ist sauer und Sie sind möglicherweise in rechtlichen Schwierigkeiten!
So, nun sind wir fast fit mit den Frames, ein paar "Verschönerungsmöglichkeiten" für Frames sollten Sie aber noch kennen, siehe letzten Teil dieser Lektion.
>> zum letzten Teil dieser Lektion (4. von 4): Framesattribute.
<< Modul 3.1.2