![]() |
![]() |
|
Mit der folgenden HTML-Seite können Sie überprüfen, welche JavaScript-Versionen der jeweilige Browser unterstützt: <html> <head> <title>JavaScript</title> </head> <body> <script language="JavaScript"> document.write("Der Browser unterstützt JavaScript <hr />"); </script> <script language="JavaScript1.1"> document.write("Der Browser unterstützt JavaScript v1.1<hr />"); </script> <script language="JavaScript1.2"> document.write("Der Browser unterstützt JavaScript v1.2<hr />"); </script> <script language="JavaScript1.3"> document.write("Der Browser unterstützt JavaScript v1.3<hr />"); </script> <script language="JavaScript1.4"> document.write("Der Browser unterstützt JavaScript v1.4<hr />"); </script> <script language="JavaScript1.5"> document.write("Der Browser unterstützt JavaScript v1.5<hr />"); </script> </body> </html> In Abbildung 2.1 sehen Sie beispielsweise, was der Internet Explorer 6 ausgibt.
Abbildung 3.2 Die vom Internet Explorer 6 unterstützten JavaScript-Versionen Beachten Sie bei obigem Beispiel, dass man mit document.write() insbesondere auch HTML-Code, in diesem Fall das <hr>-Tag für eine horizontale Linie, ausgeben kann. Der folgenden Tabelle entnehmen Sie, welche Parameter ausgewählte Browserversionen erkennen bzw. unterstützen:
Durch die Verwendung spezieller language-Attribute können Sie Fehlermeldungen vermeiden, die bei der Verwendung von zu modernen JavaScript-Kommandos erscheinen würden. Wenn Sie also Sprachelemente von JavaScript verwenden, die erst ab Version 1.1 unterstützt werden, sollten Sie das language-Attribut auf "JavaScript1.1" setzen; ältere Browser ignorieren dann die Befehle völlig. Das stimmt leider nicht immer. Besonders »schlimm« ist in diesem Zusammenhang jedoch Konqueror und damit auch Safari. Es scheint zu genügen, dass der Wert des language-Attributs mit "JavaScript" beginnt. Fügt man beispielsweise in obiges Listing noch einen Block mit <script language="JavaScript1.6"> ein, würde auch dieser ausgeführt werden, obwohl das nicht zutrifft (siehe Abbildung 3.3).
Abbildung 3.3 Konqueror kennt (angeblich) schon JavaScript 1.6! Aus diesem Grund prüft man heutzutage kaum mehr die exakte JavaScript-Version, die ein Browser unterstützt, sondern man prüft, welche JavaScript-Features ein Browser umsetzen kann. Zahlreiche Beispiele dazu finden Sie im weiteren Verlauf dieses Buches. 3.1.2 Browser ohne JavaScript
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| //: Hiermit wird ein einzeiliger Kommentar eingeleitet; alles hinter den beiden Querstrichen in der jeweiligen Zeile wird vom JavaScript-Interpreter ignoriert. |
| /* und */: Hiermit wird ein mehrzeiliger Kommentar eingeleitet; alles nach /* wird vom JavaScript-Interpreter ignoriert, bis die Zeichenfolge */ kommt und den Kommentar abschließt. |
Im folgenden Listing sehen Sie Beispiele für Kommentare:
<html>
<head>
<title>JavaScript</title>
</head>
<body>
<script language="JavaScript">
// Hier wird auf generelle JavaScript-Unterstützung geprüft
document.write("Der Browser unterstützt
JavaScript<hr />");
</script>
<script language="JavaScript1.1">
/* Hier geht es um JavaScript 1.1 */
document.write("Der Browser unterstützt JavaScript v1.1<hr />");
</script>
<script language="JavaScript1.2">
// JavaScript 1.2 wird überprüft,
// und zwar gründlich
document.write("Der Browser unterstützt JavaScript v1.2<hr />");
</script>
<script language="JavaScript1.3">
/* JavaScript 1.3 wurde mit Navigator 4.06 eingeführt */
document.write("Der Browser unterstützt JavaScript v1.3<hr />");
</script>
<script language="JavaScript1.4">
document.write("Der Browser unterstützt JavaScript v1.4<hr />");
</script>
<script language="JavaScript1.5">
document.write("Der Browser unterstützt JavaScript v1.5<hr />");
</script>
</body>
</html>
Kommen wir zum ursprünglichen Problem zurück. Der Browser gibt eine Fehlermeldung aus, weil --> als JavaScript-Code interpretiert wird und nicht als HTML-Element. Wenn dem --> jedoch ein // vorangestellt wird, ignoriert der JavaScript-Interpreter diesen Code; der HTML-Interpreter jedoch stellt fest, dass der Kommentar zu Ende ist. Der folgende Code wird von Browsern, die JavaScript unterstützen, ausgeführt. Browser, die kein JavaScript unterstützen oder bei denen JavaScript deaktiviert ist, sehen einen HTML-Kommentar, ignorieren das Innere und geben folglich nichts aus, auch keinen puren JavaScript-Code.
<html> <head> <title>JavaScript</title> </head> <body> <script language="JavaScript"><!-- document.write("The weather means the seasons"); //--></script> </body> </html>
Bei modernen (nicht JavaScript-fähigen) Browsern ist es allerdings nicht mehr notwendig, den JavaScript-Code durch ein Kommentarzeichen zu verstecken.
Sie sehen an den obigen Beispielen, dass es relativ einfach ist, bei Browsern, die JavaScript unterstützen, einen Text auszugeben. Der andere Weg ist aber auch möglich. Es gibt hierfür ein besonderes HTML-Element, <noscript>, das so ähnlich wie <noframes> funktioniert. Damit sind folgende Szenarien denkbar:
| Der Browser unterstützt kein JavaScript, egal, ob das <noscript>-Tag bekannt ist oder nicht. Es wird notfalls ignoriert, und die darauf folgenden HTML-Elemente werden interpretiert (bzw. der Inhalt wird angezeigt). |
| Der Browser unterstützt JavaScript, und es ist auch eingeschaltet. Dann wird alles, was zwischen <noscript> und </noscript> steht, nicht dargestellt. |
| Der Browser unterstützt JavaScript, es ist jedoch ausgeschaltet. Dann wird auch all das dargestellt, was zwischen <noscript> und </noscript> steht. |
<html> <head> <title>JavaScript</title> </head> <body> <script language="JavaScript"><!-- document.write("The weather means the seasons"); //--></script> <noscript> Ihr Browser kann mit JavaScript nichts anfangen, oder es ist ausgeschaltet! </noscript> </body> </html>
Denken Sie immer auch an diejenigen Besucher, die JavaScript deaktiviert haben oder deren Browser (man denke nur an die eingeschränkten Browser von Handhelds) kein JavaScript unterstützt. Erstellen Sie notfalls eine Version Ihrer Website, die auch ohne JavaScript funktioniert.
Abbildung 3.5 zeigt, dass das tatsächlich funktioniert: Sie sehen obiges Dokument im klassischen Text-Webbrowser Lynx.

Hier klicken, um das Bild zu Vergrößern
Abbildung 3.5 Kein JavaScript beim Text-Browser Lynx
Wenn Sie später einmal JavaScript-Programme schreiben, die auf mehreren unterschiedlichen Seiten benötigt werden, wäre es eigentlich ziemlich töricht, dasselbe Skript in mehrere Seiten zu kopieren – der Aufwand bei Änderungen am Skript wäre beträchtlich, da mehrere Dateien geöffnet und geändert werden müssten.
Es gibt hier auf den ersten Blick einen Ausweg, der aber auf den zweiten Blick auch seine Nachteile hat. Zuerst zur grauen Theorie: Man kann beim <script>-Tag im Attribut src den Namen einer externen Datei mit JavaScript-Kommandos angeben. Als Dateiendung hat sich hierbei .js durchgesetzt. Es empfiehlt sich, für alle externen Dateien ein eigenes Verzeichnis anzulegen, damit diese alle gesammelt an einem zentralen Ort zu finden sind.
Angenommen, folgende Datei ist auf dem Webserver im virtuellen Verzeichnis js unter dem Namen weather.js gespeichert:
//erste externe JavaScript-Datei document.write("The weather means the seasons");
Sie wird folgendermaßen in ein HTML-Dokument eingebunden, um dieselbe Wirkung zu erzielen wie das Dokument aus dem vorigen Beispiel:
<html> <head> <title>JavaScript</title> </head> <body> <script language="JavaScript" src="/js/weather.js"> </script> </body> </html>
Natürlich kann auch hier das language-Attribut gesetzt werden (in den nächsten Kapiteln setzen wir aber aus den zuvor genannten Gründen auf type). Bei dem folgenden Dokument wird nur etwas ausgegeben, wenn der Browser JavaScript Version 1.1 unterstützt:
<html> <head> <title>JavaScript</title> </head> <body> <script language="JavaScript1.1" src="/js/weather.js"> </script> </body> </html>
Dieses Vorgehen birgt aber auch einen kleinen Fallstrick: Probieren Sie doch einmal Folgendes in Ihrem Browser aus:
<html>
<body>
<script language="JavaScript" src="/js/weather.js"><!--
document.write("<br />Invincibility is in oneself,
vulnerability is in the opponent");
//--></script>
</body>
</html>

Hier klicken, um das Bild zu Vergrößern
Abbildung 3.6 Nur ein Zitat wird angezeigt.
Das Ergebnis sehen Sie in Abbildung 3.6: Der Inhalt des <script>-Elements wird ignoriert. Der Grund: Ist das src-Attribut des <script>-Tags gesetzt, wird eingeschlossener JavaScript-Code nicht betrachtet; ist src nicht gesetzt, so wird der eingeschlossene Code ausgeführt. Um also beide Sätze auszugeben, muss das HTML-Dokument folgendermaßen abgeändert werden:
<html> <body> <script language="JavaScript" src="/js/weather.js"></script> <script language="JavaScript"><!-- document.write("<br />Invincibility is in oneself, vulnerability is in the opponent"); //--></script> </body> </html>
Obwohl externe Dateien sehr praktisch und auch recht weit verbreitet sind, haben sie einen Nachteil: Sie werden in der Regel erst dann geladen, wenn das komplette HTML-Dokument vorliegt. Es kann also unter Umständen ein wenig dauern, bis der Code vorliegt. Das kann bei komplexeren Beispielen durchaus zu Timing-Problemen führen. Sollten in diesem Buch externe Dateien verwendet werden, so dient das in der Regel der Übersichtlichkeit des Codes. Behalten Sie aber das potenzielle Timing-Problem im Hinterkopf.
| << zurück |
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken.
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.