2.3 Clientseitige Programmierung Interaktion mit Webseiten auf dem Client Hochschule Darmstadt Fachbereich Informatik Seitenumschaltung Hotwords, (transparente) Schaltflächen, sensitive Grafik HTML Eingabeformulare 2.3 Clientseitige Programmierung Listbox, Checkbox, Radiobutton Konsistenzprüfung der Eingabewerte (auf dem Client !) HTML ECMAScript objektbezogene Ereignisbehandlung Veränderung der HTML-Seite (auf dem Client !) ECMAScript, DOM Ajax allgemeine Programmierung aufwändige Visualisierung (Konfigurator beim Autokauf), spezielle Widgets (TreeControl) Java Applet Flash wird in der Vorlesung nicht behandelt 162 163 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3 Clientseitige Programmierung Zur Abgrenzung: Server-seitig Content Management System 2.3 Clientseitige Programmierung Skriptsprachen wurden ausgebaut Große Datenmengen bzw. persistente Daten werden auf dem Server gehalten! Ursprung: Programmierung von Eingabeformularen Ereignisbehandlung war auf Formulare beschränkt komplexere Aufgaben erforderten Java, aber selbst damit kein Zugriff auf HTML-Dokument Durchsuchen großer Datenmengen Datenbankabfrage (z.B. Fahrplanauskunft) Volltextsuchmaschine seit ca. 1999: Layout-Elemente als programmierbare Objekte Speicherung von Daten alle Eigenschaften per Skript änderbar Ereignisbehandlung mit zugeordneten Skripten Gästebuch, Schwarzes Brett, Bestellungen Realisierungsmöglichkeiten CGI, proprietäre Server-APIs (NSAPI, ISAPI) PHP, ASP, JSP Java Servlet Java Applet mit RMI (remote method invocation) ... Seiten können vom Surfer modifiziert werden (z.B. Warenkorb) ermöglicht Anzeige von Berechnungsergebnissen (z.B. Gesamtkosten) ermöglicht Auf- und Zuklapp-Effekte ermöglicht lokale Animationen ... 164 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 165 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3 Clientseitige Programmierung 2.3 Clientseitige Programmierung Beispiel (ECMAScript eingebettet in HTML) Historie hatte mit Java nur C gemeinsam <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"> <head> <title>Sinn des Lebens</title> <script type="text/javascript"> <!-var Hinweis = "Gleich werden Quadratzahlen ausgegeben"; alert(Hinweis); Ursprung: JavaScript (Netscape) in Navigator 2.0 von Netscape an Microsoft lizenziert; MS hinkte hinterher HTML-Kommentar! Alte Browser geben sonst das Skript als Text aus function SchreibeQuadrate() { var SinnDesLebens = 42; var i, x; var Satzteil = "Das Quadrat von "; for(i=1; i <= SinnDesLebens; ++i) { ersetzt das x = i * i; aktuelle Dokudocument.write(Satzteil+i+" ist "+x+"<br />"); ment (besser } via DOM) } //--> </script> Ausführung zu </head> <body onload="SchreibeQuadrate()"> Beginn des </body> Ladevorgangs </html> JScript (Microsoft) lizenzunabhängige Sprachvariante mit MS-eigenen Erweiterungen (MSIE versteht JavaScript und JScript) ECMAScript (ECMA-262, herstellerunabhängig) European Computer Manufacturer's Association, Genf - aktuell: 3rd Edition, 1999 darauf konzentrieren wir uns autorisiert von W3C, übernommen als ISO / IEC 16262 Netscape und Microsoft haben Einhaltung zugesagt http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf Quelle: SelfHTML 166 167 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3.1 ECMAScript: Definition Overview Hochschule Darmstadt Fachbereich Informatik Free-formatted with C-like syntax. Careful formatting is optional, unlike FORTRAN. Interpreted and loosely-typed. You don't have to wrestle with a pedantic compiler. Garbage collected with no pointers. Like Java, someone else cleans up your mess. Floating point numbers and Unicode strings. Basic types are kept simple. Arrays and objects. Objects are easy and informal, and have properties and methods. 2.3.1 ECMAScript: Definition Object-based, not objectoriented. Complex object features are left out, unlike C++ or Java. Null and undefined special values. Variables and functions can be created anytime. Flexible functions. Bare statements without a main() will do. Variable parameters for functions. Highly portable. Hardware independent, so it can run anywhere, much like Java 168 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 ☺ 169 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3.1 ECMAScript: Definition Vergleich mit C Syntax sehr ähnlich 2.3.1 ECMAScript: Definition Einfache Literale (Notation für Werte) man kann einfach mal drauflos schreiben... Notation wie in C Zuweisung, if, switch, for, while, do, try catch, //, /*...*/ - Besonderheiten: with, for (var Prop in Objekt) {} Konstanten, Operatoren (Stringverkettung mit +) Variablen nicht typisiert Zahlen sind immer Gleitkommazahlen Schlüsselworte var bzw. function statt Typ in der Deklaration Integer-Literal Floating-Point Literal String-Literal Boolean-Literal var var var var antwort pi Gruss isPrime = = = = 42; 3.14; "Hello World"; true; Schlüsselworte null, true, false Objekterzeugung mit new Besonderheit für Strings wie in Java; kein delete wahlweise mit "..." oder '...' ermöglicht String im String (z.B. String in HTML-Attributwert) nicht zeilenorientiert ; wird am Zeilenende automatisch eingefügt, falls es fehlt (kein Zeilenende hinter return oder vor ++ und -- lassen !) 170 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 171 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3.1 ECMAScript: Definition 2.3.1 ECMAScript: Definition Array Assoziatives Array das kann C nicht... dynamisch erzeugtes und erweiterbares Objekt das kann C nicht... dynamisch erzeugtes und erweiterbares Objekt ganzzahliger Index im Bereich 0..length -1 Elementtyp beliebig und nicht notwendigerweise einheitlich String als Index Elementtyp beliebig und nicht notwendigerweise einheitlich vgl. Datenstruktur / struct / Hashtabelle / map / dictionary Erzeugung Erzeugung, Erweiterung und Zugriff ohne Längenangabe für dynamische Erweiterung var Vektor1 = new Array (); mit Längenangabe (eine Zahl) var Vektor2 = new Array (27); mit Initialisierung (mehr als 1 Wert oder Objekt) var Vektor3 = new Array ("abc", 55, "xyz"); var Vektor = new Array (); Vektor["posLeft"] = 45; var Element = Vektor["posLeft"]; Verarbeitung häufig mit Hilfe von for (var Element in Vektor) { ... } Zugriff var Element = Vektor2[4]; Vektor1[0] = "text"; var AnzahlElemente = Vektor2.length; Arrays werden beim Zugriff auf DOM häufig gebraucht Assoziative Arrays sind wirklich praktisch 172 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 173 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3.1 ECMAScript: Definition 2.3.1 ECMAScript: Definition Literale für Arrays Funktionen konstruieren Objekte dürfen auch Ausdrücke als Elemente enthalten, d.h. die Elemente müssen nicht ihrerseits Literale sein werden im Rahmen der JSON genutzt (siehe Abschnitt "Ajax") Deklaration mit Schlüsselwort function Rückgabe von Werten aus Funktionen durch return ein Rückgabeparameter wird nicht deklariert Klammern nicht vergessen ! Beispiel Literal für numerisch indiziertes Array var Tiere = ["Hund", "Hamster", "Affe"]; ist Abkürzung für var Tiere = new Array ("Hund", "Hamster", "Affe"); function Doppel (InParam) { var OutParam = 2 * InParam; return OutParam; } Literal für assoziatives Array (erzeugt eigentlich ein Objekt) var Preise = { Margherita: 4.0, Salami: 4.5, Hawaii: 5.5 } 174 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 175 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 2.3.1 ECMAScript: Definition 2.3.1 ECMAScript: Definition Vordefinierte Funktionen Ausnahmebehandlung Vordefinierte Funktionen können einfach aufgerufen werden wie in Java / C++, Ausnahmeobjekte jedoch untypisiert eval(Zkette) try { ... if (FehlerAufgetreten) throw "Text oder Objekt"; ... } catch (Ausnahme) { // sofern es Text ist alert (Ausnahme); } interpretiert übergebenes Argument als Code; gibt Ergebnis zurück (z.B. Objekt) auf numerischen Wertebereich prüfen auf nicht-numerischen Wert prüfen in Kommazahl umwandeln String(anfang) in Ganzzahl umwandeln Datum in Zahl umwandeln In Zeichenkette umwandeln CGI-Parameter für URL (de)kodieren (vgl Abschnitt CGI) Erzwingt n Nachkommastellen isFinite(Wert) isNaN(Wert) parseFloat(Zkette) parseInt(Zkette) Number(Wert) String(Wert) encodeURI(Zkette) decodeURI(Zkette) Zahl.toFixed(n) ... vollständige Übersicht und Details siehe SELFHTML zusätzlicher finally-Block möglich wie in Java wird in jedem Fall ausgeführt sicherheitshalber einbauen, auch ohne eigenes throw manche Browser werfen bei manchen JavaScript-Fehlern Ausnahmen aus... 176 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10 177 Hahn, Kreling, Blechschmidt-Trapp, h_da Fachbereich Informatik, Entwicklung webbasierter Anwendungen, WS 09/10