Teil 4. Der Sprachaufbau von Client
Transcription
Teil 4. Der Sprachaufbau von Client
JavaScript Inhalt: Teil 1. Allgemeines Vorwort über die Script-Sprachen (welche, wozu) und Abhängigkeit von Browsern. Teil 2. Definition von JavaScript. 2.1 Unterschied zu Java. Teil 3. Core, Client-Side, and Server-Side JavaScript (Überblick). Teil 4. Der Sprachaufbau von Client-Side JavaScript und das Einbetten in HTML-Seiten. 4.1 <script> - Tag. 4.2 Kommentare. 4.3 Objekte und Objekthierarchie. 4.4 Erreignisse. 4.5 Variable, Werte und Wertzuweisungen. 4.6 Arrays. 4.7 Ausdrücke. 4.8 Funktionen. Teil 5. Dokumentationsquellen. Teil 1 Existierte Scriptsprache: JavaScript, VBScript, Perl, PHP(Hypertext Preprozessor) usw. Solche Scripte werden direkt in das HTML-Dokument implementiert. Sie fügen Webseiten aktive und interaktive Komponenten hinzu, die durch HTML nicht realisierbar sind. Es geben Scripte , die vom Browser ausgeführt werden(s.g. Client-Side Scripte) und die vom Server erzeugt werden(s.g. Server-Side Scripte). In einer idealen Welt gäbe es „die eine Scriptsprache“, die allen Anforderungen gerecht wird und Browser, die immer standardkonform sind. Dies ist leider nicht der Fall. Deswegen manche Probleme lassen sich in der einen Scriptsprache besser lösen als in der anderen, andere Probleme sind nur mit bestimmten Scriptsprachen lösbar. Netscape hat schon früh JavaScript als Sprache für Client-Side JavaScript eingeführt. JavaScript ist Grundlage für den Standard ECMA-262 der ECMA, der die Grundlage für zukünftige Entwicklungen plattformunabhängiger Scriptsprachen für das Internet darstellt. JavaScript wurde zuerst von Netscape im Netscape Navigator 2.0 vorgestellt. Microsoft hat im Internet Explorer ab Version 3.0 eine eigene Implementierung: JScript. JavaScript und Jscript sind nicht 100%-tig kompatibel. Teil 2 Buchmäßige Definition: JavaScript ist eine Prototypenbasierte Programmiersprache, die dazu dienen soll, dem HTML-Code zusätzliche Eigenschaften zu geben wie z.B.: Ereignisbehandlung, Objekten – und Funktionenentwicklung. 2.1 Zwar ist JavaScript, wie auch Java, den Objektorientierten Sprachen zuzuordnen,jedoch haben die beiden Sprachen bis auf die Ähnlichkeit einiger Konstrukte und den Namen nichts miteinander zu tun. Bei der JavaScript – Objekte sind Browser-Objekte, die die einfache und nahtlose Integration in diesen ermöglichen. Daher ist es wichtig, die eigentliche Sprache und diese Objekte zu trennen, um vom Browserhersteller und Kompabilitätsproblem zu abstrahieren. Teil 3 Core(Kern) JavaScript – Elemente, die Client-Side und Server-Side JavaScripts gemeinsam benutzen und zwar: Schlüsselwörte Syntax und Grammatik der Sprache Regeln für Ausdrücke, Variablen usw. Gleiche Objektmodell(obwohl Client-Side und Server-Side JavaScripts die vordefinierte Objekte auf unterschiedliche Weise benutzen). Gleiche vordefinierte Objekte wie z. B.: Array, Date, und Math. Client-Side JavaScript wird vom Browser interpretiert und ausgeführt. Wird in HTMLCode eingebettet. Kann die Ereignisse von Außen behandeln(wie z. B.: MouseClick oder Formenderung , kommt später). Server-Side JavaScript – bei der Server kann man auch den Script in HTML-Code einbetten. SSJS kann die Verbindung mit relationaler Datenbank von verschiedenen Anbieter aufbauen, die Information zwischen Benutzern verwalten oder kommunizieren mit anderen Applikationen durch LiveConnection oder Java. HTML Seite mit SSJS kann CSJS enthalten. Im unterschied zu pure CSJS, HTML-Seite, die SSJS enthält wird zur ausführbaren Datei im bytecode kompiliert. Wir haben: Datei.js und Datei.htm , die werden bei der Kompilation zusammengekoppelt in bytecode executable Webfile. Mit der Hilfe von s. g. JavaScript runtime-Maschiene wird richtige Webfile gefunden, dynamisch HTML-Seite erzeugt und zu Client übertragen. Weiter geht es nur um Client-Side JavaScrip! Teil 4 4.1 Um JavaScript in Web-Seiten zu verwenden, muß dem Browser mitgeteilt werden, wo dies beginnt und endet.Alle Scripten werden durch das Tag <script> eingeleitet. Der gesamte folgende Text wird als Scriptkörper bis zum abschließenden </script> interpretiert. Dies kann an jeder Stelle in einem HTML-Dokument gesetzt werden und ist nicht auf den Kopf oder Körper beschränkt. Weiterhin können beliebig viele Scriptblöcke in einem Dokument verwendet werden. Im Script-Tag sollte immer die verwendete Sprache angegeben werden. Für JavaScript wird dies durch „language = „JavaScript“ „ realisiert. Dadurch weiß der Browser, welche Scriptsprache verwendet wird. Bsp.: <HTML> <HEAD> <TITLE>Hallo Welt in JavaScript</TITLE> </HEAD> <BODY> <H1>Textausgabe mit JavaScript: </H1> <SCRIPT language = „JavaScript“> <document.write(„Hallo Welt“); </SCRIPT> </BODY> </HTML> Was zwischen <SCRIPT...> und </SCRIPT> steht wird als Script-Body interpretiert und ggf. als JavaScript ausgeführt. Es gibt noch eine Technik, JavaScript in Webseiten einzubinden : Einbindung von Bibliotheken aus externen Quellen, z.B. aus dem Dateisystem: Bsp.: <SCRIPT language = „JavaScript“ SRC = „myscript.js“> (diese Anweisung muß im Rumpf des <HEAD> - Tags erfolgen, sonst für Dokument unsichtbar). </SCRIPT> oder durch einen URI: Bsp.: <SCRIPT language = „JavaScript“ SRC = „http://www.irgendwo.de/myscript.js“> </SCRIPT> 4.2 Mit // wird der Rest der Zeile als Kommentar interpretiert und von Browser ignoriert. Komplette Textblöcke, die zwischen /* und */ stehen, gelten als Kommentare. 4.3 Eines der wichtigsten Konzepte von JavaScript ist das Objekt. Es gibt vier Gruppen von Objekten: 1. Browser Objekte: document, window, location, history, navigator; Wichtige Methoden von window: alert(text) – Gibt den Text text in einem Dialogfenster aus; open() – Öffnet ein neues Fenster; confirm(text) – Blendet ein Dialogfenster mit 2 Buttons für OK und Abbrechen und dem angegebenen Text text ein; close() – Schließt ein Fenster. Bsp.: window.open(„doc.html“); document – Objekt erlaubt die dynamische Generierung von HTML – Seiten. Bsp.: document.write(„Hallo Welt“); Hier wird die Methode write des Objekts document mit dem Parameter „Hallo Welt“ aufgerufen. Nach solchem Syntax unterscheidet JavaScript Interpreter eindeutig zwischen Methoden, Objekten und Parametern. location – Objekt enthält Eigenschaften vom aktuellen URL. Bsp.: location.href = „http://www.terrapin.com/samples/vsimple.html !" $#%'& (!)" )" +*(,-. /0 12 345 0 687:9 ;2 < =%>?:6 4@$A History.go(-2); Navigator – Objekt enthält Eigenschaften über Navigator, z. B.: navigator.appName – definiert die Name des Navigators; navigator.appVersion – Version. 2. Vordefinierte Objekte: Date, Math, RegExp, Function ... Date – Objekt – zur Erzeugung und Manipulation von Datum und Zeit: dateObjectName = new Date(1999,12,23,12,00,00,200); Math – Objekt –Eine Samlung von Methoden und Eigenschaften aus Mathematik, wie z.B.: sin, cos oder PI; RegExp – Objekt - Eine Samlung von Methoden und Eigenschaften zur Bearbeitung von regulären Ausdrücken: re = new RegExp("ab+c") 3. HTML – Objekte: Link, Form, Button, Checkbox, Submit ... Diese Objekte werden im Dokument erzeugt und können in der JavaScript-Funktion aufgerufen und manipuliert werden. Bsp. für Form-Objekt: ... <FORM action = ... onClick = „myFunktion(this)“; ... > <INPUT TYPE="text" ...> <P> <INPUT NAME="button1" TYPE="button" VALUE=... > </FORM> ... function myFunktion(form) { if(isEmpty(form.elements[1].value)) { ... Selbstdefinierte Objekte Neben den existierenden Objekten der Sprache gibt es Möglichkeit eigene Objekte nach Schema: Objekt = { Eigenschaft1: Wert1,...,Eigenschaft n: Wert n} zu definieren. Bsp.: Objekt1: function tier(gattung,name,haut,besitzer) { this.gattung = gattung; this.name = name; this.haut = haut; this.besitzer = besitzer; } Objek2: function person(vorname,name) { this.vorname = vorname; this.name = name; } 4. Dann kann neue Objekte erzeugen: person1= new person(„Peter“,“Meier“); einTier = new tier(„Bär“,“Winnie“,“Pelz“,person1); Auf Eigenschaften, z.B. Name des Besitzers kann man durch Ausdruck: einTier.besitzer.name zugegriffen werden. Da JavaScript alle Zuweisungen dynamisch durchführt und auch für Objekte keine Struktur deklariert werden muß, können auch neue Eigenschaften einfach durch Zuweisung wie einTier.farbe = „braun“; einTier.besitzer.alter = 37; angefügt werden und das alles im beliebige Stelle des Programms(im unterschied zu Java oder C++, wo es innerhalb einer Klasse passieren soll). Es ist gute Still – delete zu benutzen um aufzuräumen, obwohl das ist nicht unbedingt nötig ist: ein Objekt wird auf jeden Fall zerstört, sobald die Seite verlassen wird. JavaScript hat ein hierarchisches Objektmodell. Objekt window ist das oberste Objekt in der Objekthierarchie von JavaScript, denn es ist gewissermaßen der Container für alles, was in einem Fenster des Browsers angezeigt werden kann. Unterobjekte sind frame, dokument, location und history. Das Objekt document hat wiederum mehrere Unterobjekte, so z. B.: für Bilder, Verweise oder Form-Elemente. Also, die Aufgabe der Objekthierarchie ist es, dem Programmierer den Zugriff auf alle Objekte innerhalb des Browserfensters zu ermöglichen. Jedes Objekt besitzt eigene Funktionalitäten, die individuell aufgerufen werden können. Dies sind die Methoden des Objekts. Noch ein Vergleich: Klassenorientierte Sprachen gegen Prototypeorientierten. Ein Beispiel, wie JavaScript mit den HTML-Objekten manipulieren kann: <script language="javascript"><!--window.defaultStatus="Willkommen bei Rad Online!"; function isBad (wort) { var bad = new Array("Ihr Vorname", "Ihr Nachname", "0"); if (!wort) return true; for (var i = 0; i < bad.length; i++ ) { if ( wort.indexOf(bad[i]) >= 0) { return true; } } return false; } function testForm() { if ( isBad ( B C D E H F G I J K L G % M 8J G NNK( O P D Q I P H F G K R P N E G )){ alert("Bitte geben Sie Ihren Nachnamen an!"); document.Bestell.Nachname.focus(); document.Bestell.Nachname.select(); return false; } if ( isBad( B C D E H F G I J K L G % M 8J G NNK( S C T I P H F G K R P N E G )){ alert("Bitte geben Sie Ihren Vornamen an!"); document.Bestell.Vorname.focus(); document.Bestell.Vorname.select(); return false; } if ( !document.Bestell.Bestellung1.selectedIndex && !document.Bestell.Bestellung2.selectedIndex && !document.Bestell.Bestellung3.selectedIndexs ) { alert("Bitte wählen Sie mindestens einen Artikel an!"); document.Bestell.Bestellung1.focus(); return false; .... } return true; } </script> <h1>Rad Online</h1> <p>Willkommen bei der Internet-Präsenz von "Rad Online",..... <p>Bitte geben Sie ihre Bestellung in das nachfolgende Formular ein:</p> <h3>Bestellung:</h3> <table border="0" align="center" cellpadding="2"> W U V Z X : Y ] [ ( \ ^ : _ `Z X c a d b e [ f \ ` g _ c X hk i f j Y : _ % Y `f j k l n m _ ( j o _ ( \ p Y ( j o o f j qf p r j e [ s j : _ k t k X u p w b ( v f X x o _ f j ( a x ^ _ Z y ( v j ] b _ s j ( z % _ Z { f v gf \ `| a X ( a c } f ~ f l [ ` _ w b Y j : _ f ~ : Y a _ k j x o : _ Z X : Y [ ( a f \ e [ c j w b Z k j x o _ f j g g <td valign="top">Nachname:</td> Z I E k J J s G 8J x G J M s G s d I P H F s G k O P D Q I P H F G R P N E G Q T ( O P D Q I P H F G Z I E k J J s G 8J x G J M s G s d I P H F s G k S C T I P H F G R P N E s G Q ( T ( S C T I P H F G ....... <td valign="top">Bestellung(en)</td> <td valign="top" align="center"><select name="Bestellung1" size="1"> <option selected> </option> <option>Rennrad Modell 1</option> ...... 4.4 Handling Events ist ganz leicht bei JavaScript. Es gibt vordefinierte Event Objekte, die man folgendermaßen benutzen kann: <INPUT TYPE="button" NAME="Button1" VALUE="Open Sesame!" onClick="window.open('mydoc.html')"> 4.5 Um Werte zu speichern, werden Variablen verwendet. Diese entsprechen Containern, die Werte aufnehmen können. Obwohl JavaScript die primitive Datentypen wie Integer, Float oder String besitzt, die müssen nicht explizit bei der Variablendeklarationen eingegeben werden. Bsp.: var x; x = 15; x = „Hallo“; 4.6 //Arrays initialisieren Autos = [„BMW“, „Porsche“, „Mercedes“]; oder Autos = new Array („BMW“, „Porsche“, „Mercedes“); //Ausgabe document.write(Autos: “ + Autos[0] + „ , „ + Autos[2]); JavaScript bietet eine ganze Reihe von Methoden, mit denen Arrays modifiziert werden können. Die wichtigsten sind: concat – vereinigt zwei Arrays zu einem neuen. join – fügt alle Elemente eines Arrays zu einer Zeichenkette zusammen, wobei die einzelnen Elemente durch ein Komma getrennt werden. pop – entfernt das letzte Element. push – fügt ein Element hinten an das Array an. reverse – spiegelt die Reihenfolge des Arrays . - shift – entfernt das erste Element und gibt dessen Wert zurück. sort – sortiert die Elemente eines Arrays aufsteigend. z.B.: myArray = new Array("Wind","Rain","Fire") myArray.join() gibt "Wind,Rain,Fire" zurück; myArray.reverse spiegelt das Array so, daß myArray[0] ist "Fire", myArray[1] ist "Rain", und myArray[2] ist "Wind". myArray.sort sortiert das Array so, daß myArray[0] ist "Fire", myArray[1] ist "Rain", und myArray[2] ist "Wind". Alles was weiter kommt wurde vom C unverändert übernommen deswegen wird nur an den Beispielen angezeigt: 4.7 Bsp.: Zuweisungsoperatoren: x = y; x += y; ... Logische Vergleichsoperatoren: x == y; x != y; ... Arithmetische Operatoren: x % y; x++; ... Logische Operatoren: x && y; x || y; ... 4.8 Bsp.: Definition: function kubik(zahl) { return zahl*zahl*zahl; } Aufruf: Kubikzahl = kubik(100); Teil 5 Quellen: Zu JavaScript: http://developer.netscape.com/docs/manuals/js/core/jsref/index.htm http://developer.netscape.com/docs/manuals/js/client/jsref/index.htm Zu JScript: http://msdn.microsoft.com/scripting/default.htm?/scripting/jscript/ default.htm