Javasscript Zentrale Frage Wie sieht das API / Objekt-Modell aus? Sprache / Runtime Etliche Klassen zur Unterstützung (Datu um, String, Array usw.) Browser window document se elfthtml.org xu ulplanet.com l l t Dokument DOM des W3C Kompletter Zugriff auf alle HTML Tags Inhalte: Via innerHTML Stil: Via style und className Via style auch die komplette e CSS Welt Events: Via Event-Handler und W3C DOM D Events Tag Referenz Obj kt R Objekt Referenz f fü für HTML und Firefox Browser Javasscript Typen: yp Schwach g getypte yp Sprache p typeof Operator prüft grund dlegende Typen (primitiv / Objekt) instanceof Operator prüft auf Klasse K eines Objekts Variablen nicht getypt Ausführungsmodell: A füh d ll I t Interpreter t Keine statische Syntaxprüfung Erfordert White-Box Testen mit vollständiger Pfadabdeckung Daraus entstehen viele Nachteile für da as Debugging Performance relativ gering Aber: eval (text); Methode verfügb bar und sehr mächtig (und daher sicherheitstechnisch sehr prroblematisch) Javascript Funktionen Funktionsdeklarationen Rekursion unterstützt Variablen und Retouren nicht getypt (mixed content möglich) function f(n) {if (n<=0) return (1); else return (n*f(n-1));} Funktionen F kti sind i d "First "Fi t Class Cl Objects" Obj t " Können in Variablen gespeichert werde en Können als Parameter übergeben werd den var fun = Math.sin; alert ("sin(pi/2)="+fun(Math.PI/ ( (p / ) ( / /2)); )); Javascript Funktionen Funktionen erlauben anonyme y Lambda a-Definition var quad = function (x) {return x*x;} Closures: Anonyme Lambda-Definitione en mit freien Variablen var x = 7; 7 var f = function (y) {return x*y y;} x = 8; f(3) = ?? Scripting Features Attribute von Objekten j werden dynamis y sch generiert g var test = new Object(); test.feld1 = "Wert"; test feld2 = 34; test.feld2 test.feld1 = 99; // Umtypisieru ung zulässig Kurznotation K t ti var test = new Object(); test = {feld1:3, feld2:"Wert"}; for / in Iterator I Bietet Möglichkeit, g alle Instanzvariablen n zu iterieren In Java und C++ nicht ohne Weiteres möglich m Vgl: Java Reflection API for (fieldName in object) {alert t(fieldName);} A Anwendung: d K Kompakte kt W Werte-Tabellen t T b ll zu einem i Objekt Obj kt document.writeln ("<table>") for (field in object) { document.writeln ("<tr><td>"+f field+"</td>"); document.writeln ("<td>"+objec ( j ct[field]+"</td></tr>"); [ ] / / ); } document.writeln ("</table>"); Grund dlagen Anforderungen Dynamische Webseiten ohne Se erver-Interaktion Raschere Reaktion auf Client-Intteraktion Ankoppelung an lokale Browser-Features Adaptive Webseiten Umsetzungen Javascript Java Visual Basic und weitere M$ Scriipt-Sprachen Proprietär, nicht standardisiert, daher nicht empfohlen und hier auch nicht weiter behandelt Zugriff auf f Webseite <html><head>...</head> <body><h1>Beispiel</h1> <script type="text/javascript"> document write("<hr>"); document.write( <hr> ); document.write("<b>Hello</b> World"); W var x = document.getElementByI Id("name"); x.innerHTML i HTML = " "<b>Cap</b>"; b C /b " </script> Guten Morgen Herr <span id="name e"></span> </body></html> Zugriff au uf Header ... Diese Seite hatte als Referrer <script type="text/javascript"> function referrer() { if (document.referrer.length == = 0) {return ("<i>nichts</i>");} else {return (document.referre er);} } document.writeln (referrer()); </script> Schnittstelle Ja ava - Javascript Applets pp mittels Javascript p bedienen Applet muß Methoden zur Verfügung g stellen document.applets[i].methodenN Name (paras) Javascript aus Java heraus aufrufen Klasse Kl JSObject SObj t benötigt b öti t und d iim Ap Applet l t importiert i ti t Stellt Methoden zum Zugriff auf Java aScript zur Verfügung Applet muß Attribut MAYSCRIPT im Tag T tragen Beide Schnittstellen verfügbar Sicherheitseinschränkungen möglich Server-Side e Javascript Ermöglicht g Interpretation p und Verarbeitu ung g von Seiten am Server Verfügt über einige weitere Objekte Beispiele: Screen Scraping Simulation eines Clients Implementierungen Rhinola Apache Cocoon