![]() |
|
|||||
10.1.3 Ein Fenster öffnen und anpassen
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Numerische Werte: Beispielsweise Höhe oder Breite; diese haben das Format height=400. |
| Ja/Nein-Werte: Beispielsweise Statuszeile einblenden ja/nein. Die Werte yes und 1 oder die bloße Erwähnung der Option bedeuten ja, no und 0 bedeuten nein. Beispiel: status=yes,toolbar=no,menubar. |
Sie können natürlich mehrere Parameter zusammen verwenden. Sie müssen diese dazu durch Kommata voneinander trennen, und Sie dürfen keine Leerzeichen verwenden! Der folgende Befehl öffnet ein Fenster, das 400 Pixel breit ist und eine Statuszeile hat:
var fenster = window.open("", "neu", "width=400,status=1")
In Tabelle 10.1 finden Sie die wichtigsten möglichen Parameter. Eine vollständige Auflistung befindet sich in der Referenz.
| Option | Typ | Beschreibung |
| dependent | Ja/Nein | Das neue Fenster wird vom aufrufenden Fenster »abhängig«, d. h., beim Schließen des aufrufenden Fensters wird das neue Fenster auch geschlossen. |
| directories | Ja/Nein | Nur Netscape: Die Schaltflächen What’s new, What’s cool werden ein- oder ausgeblendet. |
| height | numerisch | Höhe des Fensters in Pixeln |
| innerHeight | numerisch | NN4: Höhe des Fensterinhalts in Pixeln (aktiver Bereich, vgl. height) |
| innerWidth | numerisch | NN4: Breite des Fensterinhalts in Pixeln (aktiver Bereich, vgl. width) |
| left | numerisch | IE4: Abstand vom linken Bildschirmrand in Pixeln |
| menubar | Ja/Nein | Menüleiste wird ein- bzw. ausgeblendet. |
| outerHeight | numerisch | NN4: Gesamthöhe des Fensters (inkl. Titelleiste, Scrollbalken, Rahmen etc.) in Pixeln |
| outerWidth | numerisch | NN4: Gesamtbreite des Fensters (inkl. Titelleiste, Scrollbalken, Rahmen etc.) in Pixeln |
| screenX | numerisch | NN4: Abstand vom linken Bildschirmrand in _Pixeln |
| screenY | numerisch | NN4: Abstand vom oberen Bildschirmrand in _Pixeln |
| scrollbars | Ja/Nein | Scrollbalken am rechten und/oder unteren Rand des Browser-Fensters werden angezeigt/unterbunden. |
| status | Ja/Nein | Die Statuszeile wird ein- oder ausgeblendet. |
| toolbar | Ja/Nein | Die Navigationsleiste (mit den Schaltflächen für Vor/Zurück/Neu laden etc.) wird ein- oder ausgeblendet. |
| top | numerisch | IE4: Abstand vom oberen Bildschirmrand in Pixeln |
| width | numerisch | Breite des Fensters in Pixeln |
Wenn einer dieser Parameter nicht angegeben wird, nimmt der JavaScript-Interpreter an, er wäre auf no bzw. 0 gesetzt worden. Der folgende Aufruf erzeugt also ein ganz mageres Fenster:
var fenster = window.open("", "neu", "")
Wie Sie bei den vorherigen Beispielen gesehen haben, fehlt der dritte Parameter komplett, so sieht das neue Fenster gemäß den Standardwerten des Browsers aus. Beim Netscape Navigator beispielsweise entsprechen die Ausmaße und angezeigten Leisten denen des zuletzt aktiven Browser-Fensters.
Kommen wir zu einer der eingangs erwähnten Anwendungsmöglichkeiten zurück: zur Anzeige eines nervigen Werbebanners. Wenn Ihr Werbebanner eine Breite von 200 x 100 Pixeln hat, könnte Ihr Aufruf folgendermaßen aussehen:
<HTML> <HEAD> <TITLE>Werbebanner</TITLE> <SCRIPT LANGUAGE="JavaScript"><!-- function werbebanner(){ var fenster = window.open("banner.html", "neu", "width=210, height=110") } //--></SCRIPT> </HEAD> <BODY onLoad="werbebanner"> <H1>Werbebanner wird geladen...</H1> </BODY> </HTML>
| Unter UNIX kann die Größe eines Fensters über X-Ressourcen bestimmt werden, die immer Priorität haben. |
Die Datei banner.html kann folgendermaßen aussehen:
<HTML> <HEAD> <TITLE>Banner</TITLE> </HEAD> <BODY TOPMARGIN=0 LEFTMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0> <!-- kein Abstand zum Fensterrand --> <A HREF="http://www.ihranzeigenkunde.de" TARGET="_blank"> <IMG SRC="banner.gif" WIDTH=200 HEIGHT=100 BORDER=0> </A> </BODY> </HTML>
| Aus Sicherheitsgründen muss ein mit JavaScript geöffnetes Fenster mindestens 100 Pixel hoch und 100 Pixel breit sein. Wenn Sie also für Höhe oder Breite einen Wert kleiner hundert angeben, wird das Fenster trotzdem 100 Pixel breit oder hoch dargestellt. Mit dem Netscape Navigator 4 lässt sich das umgehen, indem man signierte Skripten nutzt. Ebenso können Sie (mit screenX/screenY) ein Fenster nicht aus dem sichtbaren Bereich hinaus verschieben, wenn Sie kein signiertes Skript verwenden. |
Mit der folgenden HTML-Seite können Sie einige Parameter für das Aussehen des neuen Fensters anpassen:
<HTML> <HEAD> <TITLE>Fenster-Test</TITLE> <SCRIPT LANGUAGE="JavaScript"><!-- function neuesfenster(formular){ var optionen="width=400,height=300" for (var i=0; i<formular.elements.length; i++){ if (formular.elements[i].checked) optionen += "," + formular.elements[i].name } var fenster = window.open("", "neu", optionen) if (fenster != null){ with (fenster.document){ open() write("<"+"HTML"+">"+"<"+"BODY"+">") write("Neues Fenster mit folgenden Optionen: "+optionen) write("<"+"HR"+">") write("<"+"A HREF='javascript:window.close()'"+">") write("Fenster schließen"+"<"+"/A"+">") write("<"+"/BODY"+">"+"<"+"/HTML"+">") close() } } } //--></SCRIPT> </HEAD> <BODY> <H1>Fenster-Optionen auswählen</H1> <FORM> <INPUT TYPE="CHECKBOX" NAME="dependent"> dependent<BR> <INPUT TYPE="CHECKBOX" NAME="directories"> directories<BR> <INPUT TYPE="CHECKBOX" NAME="hotkeys"> hotkeys<BR> <INPUT TYPE="CHECKBOX" NAME="location"> location<BR> <INPUT TYPE="CHECKBOX" NAME="menubar"> menubar<BR> <INPUT TYPE="CHECKBOX" NAME="scrollbars"> scrollbars<BR> <INPUT TYPE="CHECKBOX" NAME="status"> status<BR> <INPUT TYPE="CHECKBOX" NAME="toolbar"> toolbar<BR> </FORM> <A HREF="javascript:neuesfenster(document.forms[0])">Fenster erzeugen</A> </BODY> </HTML>
|
Beachten Sie bei dem Listing, dass in das neue Fenster neben den Optionen auch ein Link zum Schließen des Fensters geschrieben wird:
<A HREF="javascript:window.close()">Fenster schließen</A>
Das Fenster kann natürlich auch vom aufrufenden Skript aus geschlossen werden; verwenden Sie dazu die Referenz auf das neue Fenster, die von window.open() zurückgegeben wird, in unserem Beispiel also fenster. close().
Ein kurzes Wort noch zu der Zeile if (fenster != null): Es kann sein, dass das Öffnen des neuen Fensters nicht funktioniert hat; insbesondere der Internet Explorer gibt bei wenig Speicher gern eine Fehlermeldung aus und öffnet das Fenster dann nicht.
Anwendungen für die neuen JavaScript-Fenster gibt es viele: Beispielsweise könnten Sie auf Ihren Webseiten eine Hilfefunktion anbieten. Der Hilfetext kann dann in einem neuen Fenster (ohne platzraubende Symbolleisten) dargestellt werden; dies ist insofern praktisch, da der Benutzer nicht auf die Zurück-Schaltfläche seines Browsers klicken muss, um wieder zu der Seite zurückzukehren, auf der er die Hilfe in Anspruch nehmen wollte.
Ein sogenanntes modales Fenster ist die gierige Variante von neuen Fenstern. Das aufrufende Fenster ist praktisch inaktiv, Sie können darauf erst wieder zugreifen, wenn das neue, modale Fenster wieder geschlossen worden ist. Sie haben diese Art von Fenstern schon kennen gelernt, sie werden beispielsweise durch window.alert(), window.confirm() und window.prompt() erzeugt. Die Gestaltungsmöglichkeit dieser Fenster war ja relativ gering, aber ab Browsern der Versionsnummer 4 gibt es Alternativen.
Für den Netscape Navigator gibt es die Fenstereigenschaft alwaysRaised, aber die funktioniert nur in Zusammenarbeit mit so genannten Signierten Skripten (siehe dazu auch das gleich lautende Kapitel). Ab dem Internet Explorer 4 gibt es für Benutzer des Microsoft-Browsers die Möglichkeiten, ein modales Fenster zu erzeugen. Die dazugehörige Methode des Fenster-Objekts heißt showModalDialog(), und in Tabelle 10.2 sehen Sie die dazugehörigen Fenstereigenschaften:
| Option | Typ | Beschreibung |
| Center | Ja/Nein | Das neue Fenster wird zentriert dargestellt (Standard). |
| dialogHeight | numerisch | Höhe des Fensters in Pixeln |
| dialogLeft | numerisch | Abstand vom linken Bildschirmrand in Pixeln |
| dialogTop | numerisch | Abstand vom oberen Bildschirmrand in Pixeln |
| dialogWidth | numerisch | Breite des Fensters in Pixeln |
| help | Ja/Nein | Hilfesymbol (Fragezeichen) wird angezeigt (Standard)/nicht angezeigt. |
| status | Ja/Nein | Die Statuszeile wird ein- (Standard) oder ausgeblendet. |
| resizeable | Ja/Nein | Die Größe des Fensters kann vom Benutzer geändert/nicht geändert (Standard) werden. |
Der folgende Code öffnet also ein modales Fenster im Internet Explorer. Sie können dort beispielsweise einen Hilfetext anzeigen. Wie immer der Warnhinweis: Da dieser Code nur mit dem Internet Explorer funktioniert, sollten Sie darauf achten, dass Ihre Seiten auch ohne die modalen Fenster navigierbar bleiben – außer natürlich, Sie operieren in einem Intranet, und die Firmenpolitik verbietet Netscape-Browser (solche Firmen gibt es tatsächlich).
<SCRIPT LANGUAGE="JavaScript"><!-- var fenster = window.showModalDialog("", "Modal", "dialogHeight=300, dialogWidth=400,status=no,resizeable") //--></SCRIPT>
In Abschnitt 10.4 finden Sie übrigens ein paar Tipps, wie Sie auch unter anderen Browsern eine Art von modalem Fenster erzeugen können.
| Wie Sie vom ausrufenden Fenster aus auf das neue Fenster zugreifen können, wissen Sie jetzt. In die andere Richtung ist das leider nicht so einfach, insbesondere, wenn man auch ältere Browser unterstützen will. |
Mit JavaScript 1.1 wurde die Fenster-Eigenschaft opener eingeführt, die eine Referenz auf das öffnende Fenster darstellt; auch der Internet Explorer 3 hat diese Eigenschaft übernommen. Mit JavaScript 1.0 kann man sie jedoch relativ einfach nachbilden. In diesem Falle ist die Eigenschaft opener des neuen Fensters gleich null, und man kann sie auf das aktuelle Fenster (also self) setzen:
<SCRIPT LANGUAGE="JavaScript"><!-- var fenster = window.open("seite.htm", "neu") if (fenster.opener==null) fenster.opener = self //--></SCRIPT>
Über die Methode opener ist es möglich, auf das ursprüngliche Fenster zuzugreifen. Im Folgenden soll eine Fernsteuerung entwickelt werden. Ausgangspunkt ist folgendes Frameset:
<HTML> <HEAD> <TITLE>Fernsteuerung</TITLE> <SCRIPT LANGUAGE="JavaScript"><!-- function inhalt(){ return "<"+"HTML"+">"+"<"+"/HTML"+">" } //--></SCRIPT> </HEAD> <FRAMESET ROWS="100,*"> <FRAME SRC="navi.html" NAME="navigation"> <FRAME SRC="javascript:top.inhalt()"> </FRAMESET> <NOFRAMES> <BODY>Ihr Browser kann mit Frames nicht anfangen!</BODY> </NOFRAMES> </HTML>
Die Datei navi.html sieht folgendermaßen aus:
<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"><!-- function fernsteuerung(){ var fenster = window.open("remote.html", "fern", "height=200, width=400,status=1") if (fenster.opener == null) fenster.opener = self } //--></SCRIPT> <BODY> <A HREF="javascript:fernsteuerung()">Fernsteuerung öffnen</A> </BODY> </HTML>
Es passiert also nichts Weltbewegendes: Durch den Klick auf den Link wird ein neues Fenster mit der Datei remote.html geladen. Diese sieht folgendermaßen aus:
<HTML> <HEAD> <TITLE>Fernsteuerung</TITLE> <SCRIPT LANGUAGE="JavaScript"><!-- function lade(seite){ //kommt noch... } //--></SCRIPT> </HEAD> <BODY> <H3>Meine Lieblingslinks</H3> <UL> <LI><A HREF="javascript:lade('http://www.microsoft.com')">Microsoft</A> <LI><A HREF="javascript:lade('http://www.netscape.com')"> Netscape</A> <LI><A HREF="javascript:lade('http://www.opera.com')">Opera</A> </UL> <A HREF="javascript:window.close()">Fenster schließen</A> </BODY> </HTML>
In der Funktion lade() muss die übergebene URL in den unteren Frame der Beispielsseite geladen werden. Mit der Eigenschaft window.opener hat man eine Referenz auf den oberen Frame, und – wie im Kapitel »Fenster II« gezeigt – kann man dann auf den unteren Frame zugreifen:
function lade(seite){ if (window.opener!=null) window.opener.parent.frames[1].location.href = seite }
Eigentlich ist dieses Vorgehen zu umständlich. Man kann auch mit ordinären HTML-Links arbeiten. Als TARGET-Attribut gibt man den Namen des Frames bzw. des Fensters an, in den bzw. das die neue Seite geladen werden soll.
Im obigen Beispiel wurde jedoch aus Versehen kein Name für den Frame angegeben; bei Fenstern haben Sie ja ohnehin standardmäßig keinen Namen. Mit JavaScript lässt sich dieser Name jedoch ganz einfach vergeben; die entsprechende Eigenschaft heißt name.
Ändern Sie also die Funktion fernsteuerung() folgendermaßen ab:
function fernsteuerung(){ var fenster = window.open("remote.html", "fern", "height=200, width=400,status=1") self.name = "Ziel"
if (fenster.opener == null) fenster.opener = self }
Die Fernsteuerung besteht dann aus (beinahe) reinem HTML-Code:
<HTML> <HEAD> <TITLE>Fernsteuerung</TITLE> </HEAD> <BODY> <H3>Meine Lieblingslinks</H3> <UL> <LI><A HREF="http://www.microsoft.com" TARGET="Ziel">Microsoft</A> <LI><A HREF="http://www.netscape.com" TARGET="Ziel">Netscape</A> <LI><A HREF="http://www.opera.com" TARGET="Ziel">Opera</A> </UL> <A HREF="javascript:window.close()">Fenster schließen</A> </BODY> </HTML>
Wie Sie bereits gesehen haben, kann ein Fenster mit Fensterreferenz.close() geschlossen werden. Es gibt jedoch eine Einschränkung: Laden Sie doch einmal folgende HTML-Seite in Ihren Browser:
<HTML> <HEAD> <TITLE>window.close()</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"><!-- window.close() </SCRIPT> </BODY> </HTML>
| Sie sollten eine Warnung erhalten (zumindest ab Netscape Navigator 3 bzw. Internet Explorer 4). Das wäre ja auch noch schöner, wenn man mit JavaScript jedes beliebige Fenster schließen könnte. Fenster, die mit JavaScript geöffnet wurden, können jedoch problemlos geschlossen werden, wie Sie im vorherigen Abschnitt ja schon gesehen haben. |
|
Etwas komplizierter ist es jedoch, wenn ein anderes Fenster geschlossen werden soll. Angenommen, der Benutzer schließt das Fenster mit der systemspezifischen Tastenkombination (unter Windows beispielsweise mit (Alt)+(F4)). Die Variable, in der eine Referenz auf das Fenster abgespeichert ist, verschwindet dadurch ja nicht. Ist das Fenster also schon geschlossen, würde Fensterreferenz.close() eine Fehlermeldung ausspucken.
| Die Fernsteuerung soll so abgeändert werden, dass sie von der Hauptseite aus wieder geschlossen werden kann. Ab Netscape Navigator 3 gibt es die Fenstereigenschaft closed, einen Booleschen Wert, der angibt, ob das Fenster noch offen ist oder nicht. Somit kann die Datei navi.html folgendermaßen geändert werden, damit die gewünschte Funktionalität sichergestellt wird: |
<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"><!-- var fenster //Variable muss global sein!
function fernsteuerung(){ fenster = window.open("remote.html", "fern", "height=200,
width=400,status=1")
self.name = "Ziel" if (fenster.opener == null) fenster.opener = self } function schliessen(){
if (fenster && !fenster.closed)
fenster.close()
}
//--></SCRIPT> <BODY> <A HREF="javascript:fernsteuerung()">Fernsteuerung öffnen</A><BR>
<A HREF="javascript:schliessen()">Fernsteuerung schließen</A>
</BODY> </HTML>
Das Kernstück ist die Abfrage if (fenster && !fenster.closed). Wie Sie bereits wissen, werden Boolesche Ausdrücke in JavaScript von links nach rechts ausgewertet. Wurde also noch kein Fenster geöffnet, wird der rechte Teil der Bedingung gar nicht mehr überprüft, und es kommt auch keine Fehlermeldung. Falls schon einmal ein Fenster geöffnet wurde, wird der rechte Teil überprüft. Ist die Eigenschaft fenster.closed gleich false, muss das Fenster noch offen sein, also wird es geschlossen.
| Für Internet Explorer 3 und Netscape Navigator 2 muss man sich etwas besonderes einfallen lassen. Eine zuverlässige Lösung ist folgende: Bevor versucht wird, das Fenster zu schließen, wird es noch einmal geöffnet, und zwar mit demselben zweiten Parameter (Fensternamen) wie zuvor. Wie Sie bereits wissen, wird genau dann kein neues Fenster geöffnet, wenn das alte noch offen ist. Das Ergebnis dieser Aktion ist aber klar: Es existiert auf jeden Fall ein (offenes) Fenster, das dann geschlossen werden kann. |
<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"><!-- var fenster //Variable muss global sein! function fernsteuerung(){ fenster = window.open("remote.html", "fern", "height=200, width=400,status=1") self.name = "Ziel" if (fenster.opener == null) fenster.opener = self } function schliessen(){
fenster = window.open("", "remote", "height=200,width=400")
if (fenster)
fenster.close()
}
//--></SCRIPT> <BODY> <A HREF="javascript:fernsteuerung()">Fernsteuerung öffnen</A><BR> <A HREF="javascript:schliessen()">Fernsteuerung schließen</A> </BODY> </HTML>
Einen kleinen Preis muss man jedoch zahlen: Man sieht ein kurzes Flackern des Fensters. Es wäre also effizienter, nur beim Netscape Navigator 2 und beim Internet Explorer 3 das Fenster (evtl. erneut) zu öffnen. Der Code wird dadurch zwar ein wenig hässlicher, aber bei einer Großzahl von Nutzern wird das Fenster ohne Störungen geschlossen.
function schliessen(){ NN2 = (navigator.userAgent.indexOf("mozilla")!= -1&&parseInt(navigator.appVersion)==2) IE3 = (navigator.userAgent.indexOf("msie")!= -1&&parseInt(navigator.appVersion)<4) if (NN2||IE3) fenster = window.open("", "remote", "height=200,width=400") if (fenster && !fenster.closed) fenster.close() }
Mit der Fensteroption alwaysRaised kann man im Netscape Navigator ab Version 4 einstellen, dass das neue Fenster immer vor allen anderen Browser-Fenstern erscheinen soll – aber das geht wie gesagt nur beim Netscape Navigator, und außerdem braucht man ein signiertes Skript. Man kann diesen Effekt jedoch relativ leicht nachbilden. Sie erinnern sich vielleicht an das Kapitel über Formularfelder (»Formulare I«). Dort stand folgender Code in einem Texteingabefeld, das schreibgeschützt werden sollte: onFocus="this.blur()". In unserem Fall wird genau das Gegenteil benötigt: Wenn das Fenster den Focus verliert, soll es ihn wieder erhalten!
Es reicht natürlich beinahe, einfach die beiden Begriffe auszutauschen:
<BODY onBlur="if (window.focus) window.focus()">
Die Abfrage hat folgenden Hintergrund: window.focus() gibt es erst ab Netscape Navigator 3 und Internet Explorer 4. Bei älteren Browsern kann man die Fehlermeldung aber ganz einfach abfangen: window.focus (ohne Klammern!) gibt dann false zurück.
Bevor Sie dieses Skript jedoch exzessiv einsetzen, denken Sie zweimal nach. Wenn sich ein Fenster stets in den Vordergrund drängt, wird es ganz schnell abgeschossen (sprich: geschlossen). Es gibt kaum eine Anwendung, in der so ein Fensterverhalten angebracht wäre.
Der Sinn des ganzen Exkurses: Ihnen ist vielleicht aufgefallen, dass die Fernsteuerung natürlich nicht mehrmals geöffnet wird, wenn Sie mehrmals auf den Fernsteuerungslink klicken (warum?); aber sie verschwindet beim zweiten Öffnen in den Hintergrund bzw. kommt nicht in den Vordergrund wie beim ersten Öffnen. In diesem Fall kann window.focus() wirklich sinnvoll eingesetzt werden. Ändern Sie die Funktion fernsteuerung() folgendermaßen ab:
function fernsteuerung(){ (if !fenster && fenster.closed){
fenster = window.open("remote.htm", "fern", "height=200, width=400,status=1") self.name = "Ziel" if (fenster.opener == null) fenster.opener = self } else {
if (fenster.focus) fenster.focus()
}
Prinzipiell gibt es zwei Möglichkeiten, ein Fenster zu bewegen, und das ist reine Definitionssache. Entweder wollen Sie das gesamte Fenster irgendwo hinbewegen, oder Sie wollen den Inhalt des Fensters scrollen. Beides ist mit neueren Browsern möglich und wird an dieser Stelle kurz vorgestellt.
Eine häufig gestellte Frage lautet: Wie kann ich das Browser-Fenster zentrieren? Andere Leute wiederum möchten, dass das Browser-Fenster maximiert oder minimiert wird (soviel vorweg, das ist nicht möglich), oder sich am oberen Bildschirmrand befindet. Dies ist kein aufwendiges Verfahren, es müssen einfach entsprechende Eigenschaften des window-Objekts gesetzt oder ausgelesen oder Methoden aufgerufen werden. Übertreiben Sie es jedoch nicht mit diesen Effekten. Viele Webbesucher reagieren ziemlich giftig, wenn man ihnen vorschreiben will, wo sich ein Fenster befindet.
Der Netscape Navigator (ab Version 4) kann ein Fenster verschieben, und zwar sowohl an eine bestimmte Position als auch um einen gewissen Wert. Dazu gibt es zwei Methoden:
| window.moveTo(x, y): Verschiebt das Fenster so, dass die linke obere Ecke die Koordinaten (x, y) hat. Es handelt sich hier um eine absolute Verschiebung. Sie können das Fenster damit nicht aus dem sichtbaren Bereich hinaus verschieben, außer Sie verwenden signierte Skripten (die werden gegen Ende des Buches vorgestellt). |
| window.moveBy(x, y): Verschiebt das Fenster horizontal um x Pixel, vertikal um y Pixel, also eine relative Verschiebung. Auch hier kann das Fenster nicht aus dem sichtbaren Bereich hinaus verschoben werden. |
Erinnern Sie sich noch an die Auflistung der Parameter für window. open()? All diese Parameter sind auch gleichzeitig Eigenschaften für das window-Objekt. Somit werden beispielsweise mit window.outerHeight und window.outerWidth die Ausmaße des Browser-Fensters angegeben.
Um nun die Maximierung eines Fensters zu simulieren (man führt damit nicht die API-Funktion für die Fenstermaximierung aus, sondern vergrößert das Fenster nur entsprechend), muss man noch die Ausmaße des Bildschirms bestimmen. Seit JavaScript 1.2 kann man diese Werte aus dem screen-Objekt erhalten:
| screen.availWidth enthält die Bildschirmbreite. |
| screen.availHeight enthält die Bildschirmhöhe. |
Eine Funktion zum Maximieren des Fensters sieht also folgendermaßen aus. Die linke obere Ecke des Fensters wird zunächst an die linke obere Ecke des Bildschirms gesetzt, und dann wird das Fenster entsprechend vergrößert.
function maximieren(){ window.moveTo(0, 0) window.outerHeight = screen.availHeight window.outerWidth = screen.availWidth }
Schon mit JavaScript Version 1.1 wurden Methoden zum Scrollen des Fensterinhalts eingeführt. Die dazugehörige Methode heißt window. scroll(x, y). Sie scrollt den Fensterinhalt an die angegebenen Koordinaten. Es ist eigentlich unlogisch, dass das Scrollen eine Methode des window-Objekts ist, da ja nicht das Fenster gescrollt wird, sondern das Dokument, das sich darin befindet. Auch hier gilt: Übertreiben Sie es nicht. Der Benutzer ärgert sich immer, wenn er das Gefühl hat, nicht die Kontrolle über ein Fenster zu besitzen. Scrollen Sie also nur dann, wenn es wirklich Sinn macht.
Eine der möglichen Anwendungen besteht darin, nach oben zu scrollen. Auf vielen, längeren Webseiten finden Sie einen Link, der nach oben scrollt – Sie ersparen Ihren Benutzern so die Mühe, mit der Maus den Scrollbalken zu treffen. Dieser Effekt wird meistens so angeboten:
<A HREF="#top">nach oben</A>
Am Anfang des Dokuments befindet sich dann eine Textmarke namens "top", zu der dann gescrollt wird. Das ist ein netter Effekt, vor allem bei längeren Dokumenten. Zum einen jedoch ändert sich die URL – was Neulinge immer stark irritiert, man glaubt es kaum – und zum anderen ist es bei komplexeren Dokumenten nicht immer möglich, ganz oben eine Textmarke unterzubringen, Wenn beispielsweise direkt nach dem <BODY>-Tag ein Werbebanner eingefügt wird (das hat der Gratis-Hoster Hypermart früher so gemacht), kann man nie nach ganz oben scrollen.
Mit JavaScript 1.1 geht das Scrollen an den Dokumentenanfang ganz bequem. Es muss einfach zu den Koordinaten (0, 0) gescrollt werden. Damit es bei älteren Browsern keine Fehlermeldung gibt, kann man beispielsweise Folgendes versuchen:
<A HREF="javascript:if (window.scroll) window.scroll(0, 0)">nach oben</A>
Dann wäre der Link jedoch inaktiv, wenn der Benutzer einen älteren Browser (zum Beispiel Internet Explorer 3) verwendet. Aus diesem Grund sollte man hier den Link mit document.write() erzeugen.
<SCRIPT LANGUAGE="JavaScript1.1"><!-- function tag(s) { return "<"+s+">" } document.write(tag("A HREF='javascript:window.scroll(0, 0)'")+ "nach oben"+tag("/A")) //--></SCRIPT>
Wie bereits erwähnt, verbietet sich das jedoch innerhalb einer Tabellenzelle. So ist die folgende Lösung wohl die optimale: Es existiert auch eine Textmarke, aber wenn der Browser die scroll-Methode unterstützt, wird diese verwendet:
<A HREF="#top" onClick="if (window.scroll) {window.scroll(0, 0); return false}">nach oben</A>
Netscape hat mit JavaScript 1.2 bzw. seiner Version 4 zwei neue Methoden eingeführt. Dabei verhält sich window.scrollTo(x, y) identisch zu window.scroll(x, y), während window.scrollBy(x, y) neu ist: Genau so wie bei window.moveBy(x, y) wird hier relativ gescrollt.
Die Methoden zum Scrollen werden im Zusammenhang mit der exakten Positionierung von HTML-Dokumenten bei DHTML noch interessant werden; fürs erste aber sollte dieser Einblick genügen.
| 1. | Erstellen Sie eine HTML-Seite mit drei Textmarken. Mit einer Fernsteuerung in einem neuen Fenster soll jede dieser Marken angesprungen werden können. |
| 2. | Erstellen Sie (für Netscape Navigator 4) eine Funktion center(), die das aktuelle Fenster auf dem Bildschirm zentriert. |
| 3. | Wie könnte man an das Ende eines Dokuments scrollen? |
| 4. | Öffnen Sie ein neues Fenster, das sich in der linken oberen Bildschirmecke befindet. Achten Sie darauf, dass das sowohl mit dem Netscape Navigator als auch mit dem Internet Explorer funktioniert! |
| << zurück |
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken und speichern. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Veröffentlichung der Inhalte oder Teilen davon bedarf der ausdrücklichen schriftlichen Genehmigung von Galileo Press. Falls Sie Interesse daran haben sollten, die Inhalte auf Ihrer Website oder einer CD anzubieten, melden Sie sich bitte bei: stefan.krumbiegel@galileo-press.de