JavaScript

ECMAScript für HTML & XML

JavaScript wurde von Netscape als Programmiersprache für Webseiten entwickelt.
In der heutigen Form ist ECMAScript eine der populärsten Programmiersprachen für alle Mitglieder der XML-Familie (und HTML).
Für Javascript gibt es zahlreiche ausgezeichnete Tutorials, z.B. SelfHTML. Deshalb finden sie hier vorwiegend spezielle, weniger bekannte Themen.
Javascript Geschichte, Standards, ...
Start Javascript in HTML-Webseiten - Start mit Javascript
Array Verwendung von Arrays in Javascript
CSS Die Objekte style und stylesheet
DOM Zugang zu allen Elementen einer Webseite
Objekt Eigene Objekte mit Eigenschaften und Methoden
Spezielle Javascript Themen
Ajax Im Hintergrund (JSON)-Daten anfordern
Argumente Übergabe von Argumenten, Auswertung mit Javascript
AutoProxy Javascript-Funktion zur automatischen Proxy-Konfiguration
Bookmarks Adresse einer Webseite als Lesezeichen (Favorit, Bookmark) speichern
Bookmarklets Javascript-Programme auf beliebige (fremde !) Webseiten anwenden
Browser Analyse der Browser-Version und Fähigkeiten (Plugins, MIME-Types)
Cookie Kekse mit Daten zur Wieder-Erkennung
Datenstrom Javascript-Programme und Daten nach Bedarf am Webserver erzeugen
Datum & Zeit Datenformate, Umwandlung, Timeout ...
Druck Drucker-Ausgabe mit Javascript
Ereignisse events und event-handler in Javascript
eval Programmierung von Javascript-Anweisungen
Fenster Ein window-Objekt öffnen und manipulieren
Große Zahlen Rechnen mit beliebig großen ganzen Zahlen und beliebiger Genuaigkeit
Kommentare //<![CDATA[     Einbettung in XML     // ]]>
HyperLinks Programmierbare Links, automatische Weiterleitung
RegExp Reguläre Ausdrücke zur Analyse & Verarbeitung von Text-Strings
Zufall Erzeugung zufälliger Zahlen und Strings, Mischen
Links Das Internet bietet Berge von Informationen zum Thema Javascript

Javascript

Brendan Eich (Wikipedia) Javascript (JS) wurde 1995 von Brendan Eich bei Netscape als Programmiersprache für Webseiten entwickelt.
Das geniale Konzept war ein durchschlagender Erfolg. Selbst Microsoft kam nicht daran vorbei.
Javascript-Programme können in jede Webseite eingebaut werden und dort Aufgaben ausführen. Damit gab es erstmals die Möglichkeit, dynamische (veränderlich, interaktiv) Webseiten herzustellen, die auf unterschiedliche Anforderungen reagieren können.

Microsoft expandierte gegen Netscape mit Methoden, die sogar in den USA als unfair eingestuft wurden. Das führte zum Zusammenbruch von Netscape, das 1998 von AOL aufgekauft wurde.

AOL prozessierte erfolgreich und erhielt 2003 von Microsoft 750 Mio US$. Danach wurde die Entwicklung eingestellt und zusammen mit 2 Mio $ an das OpenSource Projekt Mozilla übertragen.
Bei Mozilla wurde u.a. der erfolgreiche Browser FireFox entwickelt. Firefox verfügt u.a. über wesentlich verbesserte Javascript-Fähigkeiten.

Javascript wird vom Browser ausgeführt, d.h. auf Seite der Web-BesucherInnen (Clients).
Das hat einige wichtige Konsequenzen:

Der Javascript Quelltext ist in jeder Webseite offen enthalten und kann nicht geschützt werden. Jede/r kann gute Javascript-Programme kopieren und für eigene Webseiten verwenden.

Viele Aufgaben kann man wahlweise mit Server-Programmiersprachen wie → Perl oder → PHP lösen, oder mit Javascript. Da die vielen verteilten Client-PC über wesentlich mehr freie Leistung verfügen als ein Webserver, laufen Javascript-Lösungen in der Praxis wesentlich rascher.

Zur Behandlung vertraulicher Daten kann Javascript nicht eingesetzt werden. Dieses Gebiet ist den Server-Programmiersprachen vorbehalten, deren Programme und Daten nicht zugänglich sind.
Javascript ist de facto ein Offener Standard, d.h. kann lizenz- und kostenfrei verwendet werden.
Offizieller Eigentümer des Namens ist Sun, 2010 von Oracle aufgekauft.

ECMAScript

Seit 1997 wird Javascript als internationale Standard ECMAScript von der ECMA (European Computer Manufacturers Association) betreut. Die Standardisierung sorgt dafür, dass sich JS-Programme in allen Betriebssystemen und auf allen Browsern gleich verhalten (sollten).
Seit 1998 wird der Standard ECMA-262 von der ISO (International Organization for Standards) als ISO-16262 definiert.

DOM

Der ECMA Standard deckt nicht das wichtige DOM (Document Object Model) ab: Dieses Thema wird vom W3C (World Wide Web Consortium) betreut.
ECMAScript ist als dynamische Programmiersprache in der gesamte → XML-Familie integriert: JS-Programme können z.B. auch in → SVG-Grafik eingesetzt werden, z.B. zur Animation von Objekt-Grafik.
Beispiel: SVG + Javascript in einer → Analog-Uhr (funktioniert mit allen modernen Browsern, mit M$IE nur dann, wenn ein SVG-Plugin geladen ist. Javascript wird allerdings nur von Adobe SVG Plugin 3.0 erlaubt. - Besser einen guten Browser verwenden ...)
Falls die Möglichkeiten von Javascript nicht ausreichen, kan man mit → Java beliebig komplexe Programme (Applets) in Webseiten einbetten. Java und Javascript können dabei kommunizieren und einander ergänzen.
Die Ausführung der Java-Programme kann sowohl durch den Webserver als auch durch die Clients erfolgen.
JScript ist die Implementierung von ECMAScript durch M$, z.B. im M$IE Browser. Der Grund dafür dürften Lizenz-Streitereien sein. JScript verhält sich großteils konform zum Standard. Ärgerlich für EntwicklerInnen sind viele kleinere Abweichungen - Verwenden sie nur Standard-Elemente und testen sie ihre Programme mit allen gängigen Browsern !

Sandbox

Javascript Programme laufen eingeschlossen in einer Art virtueller Sandkiste. Sie haben (ebenso wie der Browser oder → Java Applets) keinen Zugriff auf das Dateisystem oder andere Resourcen des PC.
Diese rigorose Sicherheits-Schranke ist wichtig für das grundlegende Vertrauen der AnwenderInnen zu einem Browser-Programm und zu Webseiten.

Eine gefährliche Ausnahme ermöglicht der M$IE Browser. Damit kann man → ActiveX Komponenten verwenden, die genau diese Regel durchbrechen. Mit ActiveX kann man auf alle Dateien und deren Inhalte, sowie auf die Registry-Datenbank eines Windows-PC zugreifen.
Es ist bemerkenswert, dass ausgerechnet der Hersteller derartiger Produkte mit dem Argument der Sicherheit Werbung betreibt.

Sicherheit vor Spionage- und Hacker-Programmen auf Basis von ActiveX hat man mit anderen Betriebssystemen (z.B. → Linux) oder bei Verwendung von Browsern anderer Hersteller (z.B. Chrome, Firefox, Opera, Safari, ...).

Cookie

Cookies (Kekse) sind kleine Dateien, die eine Webseite auf ihrem PC hinterlassen kann. Die Daten sind transparent, d.h. man kann sie mit jedem Text-Editor ansehen.
Auf Windows findet man die Cookies im Verzeichnis 'Temporary Internet Files' (verschiedene Pfade möglich) als Text-Dokumente unter Namen wie cookie:user@provider.txt
Wenn sich ein Cookie nicht öffnen lässt, dann verschieben oder kopieren sie es in ein anderes Verzeichnis. Der Text ist leider meist nichtssagend.

Cookies dienen dazu, User wieder zu erkennen, wenn diese eine Webseite mehrmals besuchen. Sinnvolle Cookies enthalten z.B. Angaben, welche Themen man gerne besuchet, und wann man zum letzten Mal da war. Ein gutes Webseiten-Programm kann darauf reagieren und ihnen z.B. alle Neuigkeiten seit ihrem letzten Besuch anzuzeigen.

Es ist nicht bekannt, dass Cookies zu Spionage-Zwecken verwendbar sind. Leider werden Cookies von den meisten BesucherInnen abgeschaltet, vermutlich weil das eine der wenigen Möglichkeiten ist, eine befürchtete Bedrohung abzuwehren. Das trifft zwar nicht die wirklichen Spione in einem PC, verschafft aber etwas Beruhigung.

Javascript in HTML-Code

JS-Einbettung

Das Beispiel rechts zeigt, wie Javascript-Code mit Hilfe eines <script>-Elements in den HTML-Quelltext eingebettet wird.
Der gesamze Text zwischen <script> und </script> wird als Javascript interpretiert. (In Beispiel lediglich eine alarm-Anweisung, die ein Textfenster anzeigt.).
Jede Webseite kann beliebig viele <script>-Elemente enthalten.
<script>-Elemente können sich (fast) an jeder beliebigen Stelle einer Webseite befinden. Guter Stil ist jedoch nur die Einbettung in den <head> </head> einer Webseite.
Mit <script>-Elementen kann man theoretisch auch andere Programmiersprachen einbetten. Javascript ist die einzige Script-Sprache, die bei allen Browsern vorausgesetzt werden kann. Alle anderen Script-Sprachen sind auf ein Betriebssystem oder einen Browser beschränkt, oder müssen eigens installiert werden.

Ältere Form der Einbettung von Javascript-(JS)-Quelltext (Code) in den HTML-Quelltext einer Webseite:
<script type="text/javascript"> </script>
Diese (bessere) Form der JS-Einbettung gibt die → MIME-Type application/javascript von Javascript an.
Verwenden sie in neuen Webseiten nur diese Variante, und ändern sie alte Webseiten bei der nächsten Revision.
Neue Version mit einer anderen → MIME-Type:
<script type="application/javascript">
// JS-Code
</script>
Diese Form der JS-Einbettung ist falsch und sollte nicht verwendet werden, obwohl sie noch immer von den meisten Browsern 'verstanden' wird.
Nicht verwenden:
<script language="Javascript">
// JS-Code
</script>

JS im <head>

Innerhalb des <head>-Elements einer Webseite ist der bevorzugte Platz für Javascript-Code.
Hier bringen sie alle globalen JS-Variablen und alle JS-Funktionen unter.
Der JS-Code kann auch direkt (sofort) ausführbare Elemente enthalten. Beachten sie dabei, dass zum Zeitpunkt der Ausführung noch kein Element des <body> existiert, d.h. man kann mit DOM-Methoden noch nicht auf die Elemente (Texte, Bilder, ...) der Webseite zugreifen.
<html>
<head>
<script type="text/javascript">
// JS-Code
</script>
</head>
<body>...</body>
</html>

JS im <body>

Die Einbettung von <script>-Elementen in das <body>-Element einer Webseite sollte man nach Möglichkeit vermeiden. Sie ist nur dann notwendig, wenn mit der document.write-Methode Text direkt in eine Webseite geschrieben werden soll. Diese Methode sollte man nicht mehr verwenden, z.B. weil sie nicht → XHTML kompatibel ist.
Weit bessere Möglichkeiten zum Schreiben von Text und HTML-Elementen bieten → DOM-Methoden.
<html>
<head>...</head>
<body>
<script type="text/javascript">
// JS-Code
</script>
</body>
</html>

JS-Bibliothek

Es besteht die Möglichkeit, JS-Code in eine eigene Datei *.js auszulagern. Solche externe JS-Dateien werden am besten im <head> einer Webseite eingebunden.
Das ist für wiederverwendbaren JS-Code sinnvoll: Eine JS-Bibliothek wird vom Browser nur einmal geladen, kann aber mit beliebig vielen Webseiten verwendet werden.
In solchen Dateien sind allgemein verwendbare JS-Funktionen gut aufgehoben. Sie können so wesentlich einfacher verwaltet werden: Jede Änderung wirkt sich automatisch auf alle Webseiten aus, welche diese JS-Bibliothek verwenden.
Eine externe JS-Datei kann jeden beliebigen JS-Code enthalten, jedoch keine HTML-Elemente wie z.B. <script>
In fast alle Seiten dieses Webs werden Javascript-Bibliotheken eingebunden.
Einbindung einer JS-Bibliothek (Datei *.js ) in eine Webseite:
<html>
<head>
<script type="text/javascript" src="lib.js" />
</head>
<body>...</body>
</html>

Browser ohne JS-Fähigkeit

In der IT-'Urzeit' gab es einige Browser (Netscape<2, M$IE<3), die über keine Javascript-Fähigkeiten verfügten. Um zu verhindern, dass der JS-Code innerhalb von <script>-Elementen irrtümlich als HTML-Code interpretiert wird, wurden HTML-Kommentare eingefügt.
Diese Form der Codierung schadet zwar nicht, ist jedoch heute völlig überflüssig.
<script>
<!--

// JS-Code

//-->
</script>

XML-Kompatibilität

Der offene → XML-Standard verlangt eine deutliche Abgrenzung von Code-Bereichen, die von der XML-Interpretation ausgenommen werden sollen (CDATA). Das ist für → XHTML notwendig, aber auch für alle anderen Mitglieder der XML-Familie.
Die zusätzliche Abgrenzung mag kompliziert erscheinen, ermöglicht jedoch die Verwendung von Javascript nicht nur auf Webseiten, sondern zusammen mit beliebigen Mitgliedern der XML-Familie, z.B. → SVG Objekt-Grafik.
<script type="text/javascript">
// <![CDATA[

// JS-Code

// ]]>
</script>

Das <noscript>-Element

Dieses Element kann beliebig oft innerhalb des <body>-Elements vorkommen. Der darin enthaltene HTML-Code wird nur dann ausgeführt, wenn ein Browser kein Javascript versteht, oder Javascript abgeschaltet wurde.
Das Element wird kaum verwendet, bietet die Möglichkeit, versteckte Stichworte für die automatische Bewertung der Webseite (Spiders, Bots, ...) unterzubringen, ist jedoch nicht mehr zeitgemäß.
<noscript>
Javascript einschalten !
</noscript>

Javascript-Version

JS-Version lesen

Leider gibt es keine JS-Funktion, welche die maximal mögliche JS-Version des verwendeten Browsers ausgibt.

Die meisten Browser unterstützen mehrere verschiedene JS-Versionen.

JS-Version anordnen

Da die meisten Browser mehrere verschiedene JS-Versionen unterstützen, gibt es die Möglichkeit, die gewünschte JS-Version anzuordnen.
<script type="application/javascript;version=1.7">
</script>
Version:
Ein Werkzeug zum Auslesen vieler Umgebungs-Variablen, darunter auch der JS-Version ist z.B. der JavaScript Browser Sniffer von WebReference.

XHTML CSS