JavaScript – M+T Pocket . Das Programmier-Handbuch (Office Einzeltitel) [Taschenbuch]

5.1
Notation eines JavaScripts in der Webseite über <SCRPIT>

JavaScript-Anweisungen können in eine Webseite eingebunden
werden, in dem sie einfach in die entsprechende HTML-Datei als Klartext
hineingeschrieben werden. Der Beginn eines Scripts wird durch eine
HTML-Steueranweisung realisiert, die mit ihrem zugehörigen Abschluss-Tag einen
Container für die Script-Anweisungen . Es handelt sich um den Tag <SCRIPT>. All das, was in dem eingeschlossenen Container notiert wird, wird vom Browser als ein Script interpretiert. Über den Parameter language
wird bestimmt, um welche Scriptsprache es sich handelt. Dabei ist die Groß- und
Kleinschreibung irrelevant, denn es handelt sich bei allen Angaben innerhalb
der spitzen Klammern noch um reines HTML. Das bedeutet, die Anweisungen

<SCRIPT language="JavaScript">

oder

<SCRIPT language="javascript">

sind vollkommen äquivalent.

In dem <SCRIPT>-Tag
gibt es noch weitere optionale Attribute wie type.
Darauf können Sie normalerweise verzichten und wir gehen nicht weiter darauf
ein.

Wenn Sie eine andere
Script-Sprache oder -Angabe verwenden wollen (etwa VBScript, JScript oder auch der ursprüngliche Name
von JavaScript – LiveScript),
geben Sie diese vollkommen analog an. Beachten Sie, dass die Angabe von JScript oder LiveScript
künstlich Probleme in einigen Browsern erzeugen kann, die mit JavaScript als
Sprache zurechtkommen würden. Es gibt wenige Situationen, wo das sinnvoll ist.
Hingegen ist die Angabe der JavaScript-Version – etwa über die Angabe JavaScript1.1, JavaScript1.2, JavaScript1.3, JavaScript1.4 oder JavaScript1.5 – unter manchen Umständen
zweckmäßig. Wenn Sie diese Angaben zur konkreten Version setzen, werden in dem
Container folgende Anweisungen nur von den Browsern ausgeführt, die JavaScript
ab dieser Version auch unterstützen. Man kann damit die fehlerhafte Ausführung
von Scripten durch inkompatible Browser verhindern, wobei die Container logisch
sinnvoll aufgebaut werden müssen, um beim Ignorieren des Containers keine
anderen Probleme zu bekommen. Zumindest sollte es von der Theorie her so sein.
In der Praxis werden aber nicht alle alten Browser die Anweisung beachten, und
versuchen – trotz Inkompatibilität – diese neuen und/oder für sie unbekannten
Anweisungen auszuführen. Bekannt ist, dass der Navigator 3 beispielsweise in
einigen Situationen versucht, mit <SCRIPT language="JavaScript1.2"> oder <SCRIPT
language="JavaScript1.3"> gekennzeichnete
Script-Blöcke zu interpretieren, obwohl er nur JavaScript 1.1 versteht. Tauchen
in einem solchen Block Anweisungen auf, die explizit zu späteren
JavaScript-Versionen zu zählen sind, wird es zu Fehlern kommen. Grundsätzlich
und unabhängig von diesen konkreten Browserfehlern sollte man Anweisungen, die
jenseits von JavaScript 1.3 eingeführt wurden, möglichst vermeiden. Nur dieser
JavaScript-Standard wird (trotz offiziell zwei Nachfolgegenerationen)
weitgehend konform unterstützt[8].
Aber auch beim Einsatz von JavaScript 1.3 kann es trotz expliziter Auszeichnung
im <SCRIPT>-Container
wie gesagt zu Problemen kommen.

Im Rahmen des Buchs wird weitgehend auf die explizite
Auszeichnung der JavaScript-Version verzichtet.

Sie können auch in einer Webseite mehrere
Script-Container verwenden (sogar mit verschiedenen Script-Sprachen).

Sie können auf das Attribut language ganz verzichten. In dem Fall
wird der Default-Script-Interpreter des Browsers aufgerufen. Dies ist in der
Regel der JavaScript-Interpreter, aber darauf verlassen kann man sich nicht.
Besser geben Sie die Scriptsprache explizit an.

Der <SCRIPT>-Tag
kann an jeder beliebigen Stelle innerhalb eines HTML-Dokuments platziert werden
und es kann auch mehrere dieser Container innerhalb einer einzigen Webseite
geben. Die Script-Anweisungen werden einfach geladen, wenn die Webseite von
oben nach unten in den Browser abgearbeitet wird. Wenn der Browser eine
auszuführende Anweisung lädt, wird sie vollzogen. Entsprechend ist klar, dass
unten in einer Webseite notierte Scriptanweisungen auch erst dann zur Verfügung
stehen, wenn die Seite bis dahin geladen ist. Das ist dann kein Problem, wenn
das Script genau da notiert wird, wo es benötigt wird und es beim Laden
automatisch ausgeführt werden soll. In JavaScript ist es aber üblich, mit so
genannten Funktionen (darauf gehen wir noch ein) bestimmte Scriptpassagen
zusammenzufassen und vor dem automatischen Ausführen beim Laden zu schützen.
JavaScript-Funktionen werden erst ausgeführt, wenn sie aufgerufen werden. Das
ist keineswegs ungewöhnlich. Das ist in fast allen Situationen, wo Scripte
eingesetzt werden sollen, sinnvoll. Das automatische Ausführen eines Scripts
beim Laden der Webseite ist die Ausnahmesituation. Meist ist es so, dass ein
Script beim Klick auf einen Button oder Hyperlink, beim Überstreichen eines
Bereichs mit der Maus, beim Verlassen einer Webseite oder einem ähnlichen
Ereignis ausgeführt werden soll. Wenn nun der Aufruf eines Scripts erfolgt,
bevor das Script selbst geladen wurde[9],
hat man ein Problem.

Eine übliche Vorgehensweise ist es deshalb, einen <SCRIPT>-Tag
entweder sehr weit oben in der Webseite (etwa innerhalb des <HEAD>-Abschnitts
eines Dokuments oder direkt dahinter) zu platzieren oder bei der automatischen
Ausführung an der Stelle, wo sie gebraucht werden. Wenn in dem Script-Container
Funktionen oder Variablen (was das ist, klären wir natürlich auch noch)
auftauchen, merkt sich der Browser diese und sie sind dann für das ganze
Dokument verfügbar. Der Code wird so lange verfügbar sein, wie das Dokument
existiert.

Bei einem Script-Container steht in der Regel direkt nach
dem einleitenden <SCRIPT>-Tag
ein HTML-Kommentar (<!–).
Dieser wird unmittelbar vor dem abschließenden Tag </SCRIPT> mit dem entsprechenden
HTML-Kommentar-Endezeichen (–>)
wieder geschlossen. Dadurch steht der gesamte JavaScript-Code innerhalb eines
HTML-Kommentars. Dies ist zwar nicht zwingend, aber sicherer für den Fall, dass
ein Browser die Seite lädt, der keine Scripte interpretieren kann. Wenn Sie bei
einem Script-Container auf den HTML-Kommentar verzichten und ein Browser die
Seite lädt, der keine Scripte interpretieren kann, ist dies gleichbedeutend
damit, dass er den <SCRIPT>-Tag
nicht kennt. Er wird ihn nach dem Prinzip der Fehlertoleranz einfach
ignorieren. Das Problem ist dann aber, dass nachfolgender Text – in unserem
Fall sind die Script-Anweisungen für einen HTML-Interpreter nicht als Text –
ohne Formatierung auf dem Bildschirm dargestellt wird. Ein Anwender bekommt
also unter Umständen die Script-Anweisungen einfach als Text im Browser
angezeigt und das ist nicht im Sinne des Erfinders.

Die Anwendung des HTML-Kommentars im Inneren des <SCRIPT>-Containers beinhaltet einige
Fallen, die auf unglückliche Programmierung von einigen Browser-Versionen
zurückzuführen sind. Der Netscape Navigator wird in einigen Versionen
Probleme mit dem Ende-Zeichen des HTML-Kommentars haben. Er versteht es als
JavaScript-Anweisung. Man versteckt daher das Ende des HTML-Kommentars hinter
der Zeichenfolge //, was einen
JavaScript-Kommentar bedeutet. Dieses unglückselige Verhalten des Browsers
ist um so unverständlicher, da andere Browser dieses Problem nicht haben.
Aber auch der Explorer hat ein spezifisches Problem, das er mit dem Navigator
teilt. Wenn die erste JavaScript-Anweisung in der gleichen Zeile wie der
HTML-Kommentar-Tag steht, wird diese ignoriert. Die erste
JavaScript-Anweisung darf also nicht (!) in der gleichen Quelltext-Zeile
stehen wie der Beginn des HTML-Kommentars. Der abschließende und hinter einem
JavaScript-Kommentar versteckte HTML-Kommentar kann hingegen in der gleichen
Quelltext-Zeile stehen wie die letzte JavaScript-Anweisung. Übersichtlicher
ist es jedoch, wenn dieses Ende in einer eigenen Zeile steht.

Ein korrekter Script-Container mit HTML-Kommentaren sieht
also vollständig so aus:

<SCRIPT language="JavaScript">

<!–

[Script-Anweisungen]

//–>

</SCRIPT>

Das Beispiel verwendet wieder eine kleine Spielart von
dynamischen bzw. personalisierten Webseiten. Hier bekommt der Besucher aber nur
suggeriert, eine Webseite sei an seinen Browsertyp und seine Browserversion
optimal angepasst (der Marketingtext ist die einzige Optimierung ;-)) und zudem
wird ihm mit JavaScript über die Abfrage des aktuellen Systemdatums suggeriert,
die Webseite sei brandaktuell[10].

<HTML>

<SCRIPT
LANGUAGE="JavaScript">

<!–

document.write(

"<center><h1>Herzlich Willkommen auf
der Webseite</h1>"

+ "Die Seite ist optimal an den Browser " +

navigator.appName + " in der Version " +

navigator.appVersion + " angepasst und wurde am
" +

(new Date()) + " das letzte Mal
aktualisiert" );

//–>

</SCRIPT>

<BODY>

</BODY>

</HTML>

Listing 5.1: Ein Script direkt in der Webseite im <SCRIPT>-Container