![Das JavaScript-Handbuch - Einführung, Praxis und Referenz Das JavaScript-Handbuch - Einführung, Praxis und Referenz](/img/books/width167/3863240049_k.jpg)
Das JavaScript-Handbuch - Einführung, Praxis und Referenz
von: Ralph Steyer
Addison-Wesley Verlag, 2012
ISBN: 9783863240042
Sprache: Deutsch
960 Seiten, Download: 57263 KB
Format: EPUB, PDF, auch als Online-Lesen
Das JavaScript-Handbuch - Einführung, Praxis und Referenz | 1 | ||
Übersicht | 6 | ||
Inhalt | 8 | ||
Vorwort | 8 | ||
Teil I Elementare Grundlagen | 8 | ||
1 Einleitung | 8 | ||
2 Die Voraussetzungen schaffen | 8 | ||
3 Auf die Plätze, fertig, los | 9 | ||
4 JavaScript-Grundstrukturen | 9 | ||
5 Eventhandler | 10 | ||
Teil II Objekte | 11 | ||
6 Objekte und Klassen in JavaScript – Grundlagen | 11 | ||
7 Native Objekte und Klassenelemente in JavaScript | 11 | ||
8 DOM – das Mysterium der JavaScript-Welt | 13 | ||
9 Objekterweiterung, Prototyping und die Erstellung eigener Konstruktormethoden | 13 | ||
Teil III Erweiterte JavaScript-Techniken | 14 | ||
10 Erweiterte JavaScript-Techniken | 14 | ||
11 Fenster und Frames | 14 | ||
12 Browserauswertung | 15 | ||
13 Zugriff auf Webformulare | 15 | ||
14 Ereignisbehandlung und das event-Objekt | 15 | ||
15 Ausnahmebehandlung | 16 | ||
16 DHTML und Animationstechniken | 16 | ||
17 JavaScript jenseits der Version 1.5 und ECMAScript 5 | 16 | ||
18 Fehlersuche und Fehler vermeiden | 17 | ||
19 JsUnit – testgetriebene Entwicklung mit JavaScript | 17 | ||
20 Sicherheit und Optimierung | 18 | ||
Teil IV Kommunikation zwischen Client und Server | 19 | ||
21 Diener und Herr | 19 | ||
22 Das Datenformat | 19 | ||
23 AJAX und das Web 2.0 | 19 | ||
Teil V APIs, Frameworks & Toolkits | 20 | ||
24 Frameworks, Toolkit und APIs | 20 | ||
25 JavaScript-Frameworks | 20 | ||
26 Google Web APIs und das Google Web Toolkit – GWT | 21 | ||
27 Web-APIs von Microsoft – Bing | 21 | ||
28 Das YUI und die Yahoo! Web APIs und Web Services | 21 | ||
A Anhang | 22 | ||
Index | 22 | ||
Vorwort | 24 | ||
Teil I Elementare Grundlagen | 30 | ||
1 Einleitung | 32 | ||
1.1 Über das Buch | 33 | ||
1.1.1 An wen sich das Buch wendet und was Sie schon wissen sollten | 33 | ||
1.1.2 Wie dieses Buch organisiert ist | 34 | ||
1.1.3 Was Sie in dem Buch lernen | 35 | ||
1.1.4 Schreibkonventionen | 36 | ||
1.1.5 Die Quellcodes | 36 | ||
1.2 Was ist JavaScript? | 37 | ||
1.2.1 Die Geschichte von JavaScript | 38 | ||
1.2.2 Die Versionszyklen von JavaScript | 39 | ||
1.2.3 Was funktioniert wo? | 41 | ||
1.3 Der Aufbau von Skriptsprachen und die Rolle des Interpreters | 43 | ||
1.4 Zusammenfassung | 44 | ||
2 Die Voraussetzungen schaffen | 46 | ||
2.1 Hardware und Betriebssystem | 46 | ||
2.1.1 Verschiedene Betriebssysteme als Testumgebungen | 47 | ||
2.2 Die Browser | 49 | ||
2.2.1 Benchmark your Webbrowser | 52 | ||
2.3 Der Webserver | 54 | ||
2.4 Die Entwicklungs-Tools | 57 | ||
2.4.1 Integrierte Entwicklungsumgebungen | 59 | ||
2.4.2 Pimp my Firefox – Browser auf Basis von Mozilla aufrüsten | 60 | ||
2.4.3 Pimp my Internet Explorer? | 65 | ||
2.5 Sonstige Software | 67 | ||
2.5.1 Grafikprogramme | 67 | ||
2.5.2 Übertragungssoftware | 68 | ||
2.6 Zusammenfassung | 70 | ||
3 Auf die Plätze, fertig, los | 72 | ||
3.1 Projekte – nichts als Projekte | 73 | ||
3.2 Erste praktische Beispiele | 75 | ||
3.2.1 Identifizierung eines Browsers | 76 | ||
3.2.2 Die Bildschirmauflösung eines Besuchers ermitteln | 79 | ||
3.2.3 Anzeige des aktuellen Datums und der aktuellen Zeit | 80 | ||
3.2.4 Ein neues Browserfenster öffnen | 82 | ||
3.2.5 Eine Grafik in einer Webseite dynamisch austauschen | 83 | ||
3.3 JavaScript in Webseiten einbinden | 86 | ||
3.3.1 Die Inline-Referenz | 87 | ||
3.3.2 Die direkte Notation eines Skriptcontainers in der Webseite | 88 | ||
3.3.3 Der | 96 | ||
3.3.4 JavaScripts über externe Dateien referenzieren | 96 | ||
3.4 Kann ich testen, ob bei einem Browser JavaScript aktiviert ist? | 99 | ||
3.5 Zusammenfassung | 101 | ||
4 JavaScript-Grundstrukturen | 102 | ||
4.1 Kommentare in JavaScript | 103 | ||
4.1.1 Mehrzeilige Kommentare | 103 | ||
4.1.2 Einzeilige Kommentare | 104 | ||
4.2 Token und Parser | 104 | ||
4.2.1 Token | 105 | ||
4.2.2 Parser | 105 | ||
4.3 Schlüsselwörter in JavaScript | 105 | ||
4.4 Datentypen, Variablen und Literale | 108 | ||
4.4.1 Variablen | 108 | ||
4.4.2 Literale | 108 | ||
4.4.3 Datentypen und Typisierung | 109 | ||
4.4.4 Variablen anlegen | 113 | ||
4.4.5 Ein vollständiges Beispiel zu den Details mit Variablen | 116 | ||
4.5 Funktionen, Prozeduren und Methoden | 118 | ||
4.5.1 Form 3 eines Unterprogramms – Methoden | 119 | ||
4.5.2 Verwendung von vordefinierten Funktionen | 120 | ||
4.5.3 Die Definition eigener Funktionen | 123 | ||
4.5.4 Der Aufruf eigener Funktionen | 125 | ||
4.5.5 Ein Beispiel für selbst definierte Funktionen | 126 | ||
4.5.6 Verwendung von externen JavaScript-Dateien als Funktionsbibliotheken | 127 | ||
4.5.7 Lokale Variablen in Funktionen | 130 | ||
4.5.8 Flexible Anzahl an Funktionsargumenten und der Token arguments | 133 | ||
4.5.9 Rekursive Funktionsaufrufe | 141 | ||
4.5.10 Funktionsreferenzen | 144 | ||
4.5.11 Benannte versus anonyme Funktion | 146 | ||
4.5.12 Innere Funktionen | 147 | ||
4.5.13 Callbacks | 148 | ||
4.6 Anweisungen | 155 | ||
4.6.1 Blöcke | 155 | ||
4.6.2 Ausdrücke | 156 | ||
4.6.3 Operatoren | 157 | ||
4.6.4 Boolesche Operatoren | 160 | ||
4.6.5 Logische Operatoren | 161 | ||
4.6.6 Zuweisungsoperatoren | 163 | ||
4.6.7 Bitweise Operatoren | 163 | ||
4.6.8 Die Operatorenrangfolge | 170 | ||
4.7 Steuerzeichen bei Zeichenketten | 171 | ||
4.8 Kontrollstrukturen in JavaScript | 172 | ||
4.8.1 Die if-Bedingung | 172 | ||
4.8.2 Die switch-Fallunterscheidung | 174 | ||
4.8.3 Die while-Schleife | 177 | ||
4.8.4 Die do-while-Schleife | 181 | ||
4.8.5 Die for-Schleife und die for-in-Schleife | 183 | ||
4.8.6 Gezielte Abbrüche von Schleifen mit break und continue | 185 | ||
4.9 Ein erster Blick auf Objekte und das DOM-Konzept | 186 | ||
4.9.1 Was sind Objekte? | 187 | ||
4.9.2 Wie entstehen Objekte? | 188 | ||
4.10 Zusammenfassung | 190 | ||
5 Eventhandler | 192 | ||
5.1 Was versteht man unter einem Ereignis? | 193 | ||
5.1.1 Eventhandler in HTML bzw. XHTML | 194 | ||
5.1.2 Eventhandler in JavaScript | 196 | ||
5.1.3 HTML- bzw. XHTML- versus JavaScript-Eventhandler | 197 | ||
5.2 Verschiedene Ereignisse | 198 | ||
5.2.1 Laden und Verlassen der Webseite | 198 | ||
5.2.2 Aufruf beim Klick auf ein sensitives Element | 202 | ||
5.2.3 Aufruf beim Überstreichen mit dem Mauszeiger | 208 | ||
5.2.4 Reaktion auf Mausbewegungen | 210 | ||
5.2.5 Die Tastaturereignisse | 210 | ||
5.2.6 Selektieren von Text | 213 | ||
5.2.7 Unterbrechung eines Bildladevorgangs | 215 | ||
5.2.8 Formularereignisse | 216 | ||
5.2.9 Reaktion auf Zurücksetzen oder Absenden eines Formulars | 218 | ||
5.3 Zusammenfassung | 221 | ||
Teil II Objekte | 222 | ||
6 Objekte und Klassen in JavaScript – Grundlagen | 224 | ||
6.1 Was sind Objekte? | 225 | ||
6.1.1 Die grundsätzliche Definition der objektorientierten Programmierung | 225 | ||
6.2 Klassen, Instanzen und Vererbung | 226 | ||
6.2.1 Vererbung | 226 | ||
6.3 JavaScript-Objekte erzeugen | 227 | ||
6.3.1 Test auf die Existenz eines Objekts | 231 | ||
6.4 Object – ganz oben im Baum | 232 | ||
6.4.1 Eigenschaften von Object | 232 | ||
6.4.2 Methoden von Object | 233 | ||
6.5 Klassenmethoden und Klasseneigenschaften verwenden | 237 | ||
6.6 Zusammenfassung | 239 | ||
7 Native Objekte und Klassenelemente in JavaScript | 240 | ||
7.1 Datenfelder | 241 | ||
7.1.1 Wozu benötigt man Datenfelder? | 241 | ||
7.1.2 Datenfelder erzeugen | 242 | ||
7.1.3 Zugriff auf Elemente im Datenfeld | 243 | ||
7.1.4 Die Array-Notation | 246 | ||
7.1.5 Methoden und Eigenschaften von Datenfeldern | 250 | ||
7.2 Objekte vom Typ Boolean | 256 | ||
7.3 Datumsoperationen mit Date | 257 | ||
7.3.1 Die Methoden von Date | 259 | ||
7.3.2 Erzeugen eines Datumsobjekts mit einem vorgegebenen Datum | 262 | ||
7.3.3 Ein Schaltjahr bestimmen | 264 | ||
7.3.4 Festlegen des Ablaufdatums für den Inhalt einer Webseite | 266 | ||
7.3.5 Berechnen der Zeitspanne bis zu einem bestimmten Termin | 269 | ||
7.3.6 Das Erstellungsdatum einer Webseite per JavaScript faken | 271 | ||
7.3.7 Veränderte Inhalte auf Grund des Datums | 274 | ||
7.3.8 Die zeitgesteuerte optische Veränderung einer Seite | 277 | ||
7.3.9 Eine Datumsangabe in den IETF-Standard oder eine lokale Darstellung umwandeln | 279 | ||
7.3.10 Die Berechnung regelmäßiger Termine | 283 | ||
7.3.11 Den Unterschied zwischen der lokalen Zeit und Greenwich Mean Time ermitteln | 284 | ||
7.4 String-Operationen | 285 | ||
7.4.1 Methoden von Zeichenketten | 286 | ||
7.4.2 Die Länge einer Zeichenkette und verschiedene String-Methoden | 290 | ||
7.4.3 Die Unicode-Kodierung von Zeichen bestimmen | 291 | ||
7.4.4 Aus Unicode Zeichenketten erzeugen | 293 | ||
7.4.5 Einen Teil eines Strings extrahieren | 295 | ||
7.4.6 Einen String an einem definierten Trennzeichen in ein Datenfeld aufspalten | 297 | ||
7.5 Reguläre Ausdrücke | 298 | ||
7.5.1 Was sind reguläre Ausdrücke? | 299 | ||
7.5.2 Objekte vom Typ RegExp | 304 | ||
7.5.3 Test auf eine gültige E-Mail-Adresse und einen korrekten Usernamen mit test() | 308 | ||
7.5.4 Verwertung des resultierenden Datenfelds beim Durchsuchen eines Strings mit exec() | 310 | ||
7.5.5 Extrahierung der Versionsnummer eines Browsers mit exec() und Auswertung von geklammerten Teilen | 312 | ||
7.5.6 Suchen und Ersetzen von Suchpattern mit search() und replace() | 314 | ||
7.5.7 Sperren bestimmter Eingaben in einem Webformularfeld mit regulären Ausdrücken und der match()- beziehungsweise replace()-Methode | 315 | ||
7.6 Objekte vom Typ Function | 318 | ||
7.7 Nutzen von Klassenelementen aus Math | 321 | ||
7.7.1 Eigenschaften bzw. Konstanten | 321 | ||
7.7.2 Methoden | 321 | ||
7.8 Objekte und Klassenelemente von Number | 324 | ||
7.8.1 Eigenschaften von Number | 324 | ||
7.8.2 Methoden von Number | 326 | ||
7.9 Zusammenfassung | 330 | ||
8 DOM – das Mysterium der JavaScript-Welt | 332 | ||
8.1 Was ist das DOM-Konzept? | 333 | ||
8.1.1 Grundsätzliches zum Weg durch den DOM | 334 | ||
8.2 Die verfügbaren DOM-Objekte | 338 | ||
8.2.1 Das Konzept der Objektfelder | 340 | ||
8.3 Generelle Zugriffsmöglichkeiten auf DOM-Objekte | 341 | ||
8.3.1 Der Zugriff über einen Namen – getElementsByName() | 342 | ||
8.3.2 Zugriff über eine ID – getElementById() | 344 | ||
8.3.3 Zugriff über den Elementnamen – getElementsByTagName() | 345 | ||
8.3.4 Der kurze Dienstweg – this | 346 | ||
8.4 Zugriff auf Inhalte von Elementen in der Webseite | 348 | ||
8.4.1 Zugriff auf Textinhalte | 348 | ||
8.4.2 Zugriff auf Formularinhalte | 349 | ||
8.4.3 Zugriff auf klassische HTML-Attribute | 349 | ||
8.4.4 Zugriff über nodeValue | 354 | ||
8.5 Das Objekt document | 354 | ||
8.5.1 Die Eigenschaften | 354 | ||
8.5.2 Die Methoden von document | 372 | ||
8.6 Das node-Objekt | 379 | ||
8.6.1 Knotenarten | 379 | ||
8.6.2 Die Eigenschaften eines node-Objekts | 381 | ||
8.6.3 Die Methoden eines node-Objekts | 388 | ||
8.7 Zusammenfassung | 393 | ||
9 Objekterweiterung, Prototyping und die Erstellung eigener Konstruktormethoden | 394 | ||
9.1 Ein einzelnes Objekt erweitern | 395 | ||
9.2 Was zeichnet eine Methode gegenüber einer normalen Funktion aus? | 397 | ||
9.3 Was ist Prototyping? | 398 | ||
9.4 Erstellen von Konstruktormethoden | 407 | ||
9.4.1 Was zeichnet eine Konstruktormethode aus? | 407 | ||
9.4.2 this bei Konstruktormethoden | 408 | ||
9.4.3 Vererbung mit Prototyping simulieren | 413 | ||
9.5 Datenkapselung | 415 | ||
9.6 Zusammenfassung | 420 | ||
Teil III Erweiterte JavaScript-Techniken | 422 | ||
10 Erweiterte JavaScript-Techniken | 424 | ||
10.1 Was umfasst dieser Abschnitt? | 425 | ||
10.2 Zusammenfassung | 427 | ||
11 Fenster und Frames | 428 | ||
11.1 Der Toplevel und die reservierten Fensternamen | 429 | ||
11.2 Die Eigenschaften und Methoden des window-Objekts | 429 | ||
11.2.1 Eigenschaften | 430 | ||
11.2.2 Die Methoden von window | 431 | ||
11.3 Anwendungen mit Fenstern | 435 | ||
11.3.1 Öffnen und Schließen eines Fensters | 435 | ||
11.3.2 Positionieren und in der Größe festlegen | 447 | ||
11.3.3 Automatische Weiterleitung von Besuchern | 451 | ||
11.3.4 Standarddialogfenster von window | 452 | ||
11.3.5 Die Startseite des Browsers aufrufen | 455 | ||
11.3.6 Zugriff auf die Statuszeile des Browsers | 456 | ||
11.3.7 Eine Aktion zeitverzögert aufrufen | 458 | ||
11.3.8 Zugriff auf die Adresszeile des Webbrowsers | 461 | ||
11.4 Frames, IFrames und das Objektfeld frames | 470 | ||
11.4.1 Die Eigenschaften und Methoden von Frame-Objekten | 471 | ||
11.4.2 Gleichzeitiges Aktualisieren mehrerer Frames | 472 | ||
11.4.3 Daten aus IFrames laden – ein unsichtbarer Datenspeicher | 474 | ||
11.4.4 Daten in einem IFrame speichern | 479 | ||
11.4.5 Verhindern, dass eine Datei in einem Frameset angezeigt wird | 481 | ||
11.5 Zugriff auf die History des Webbrowsers | 482 | ||
11.5.1 Die Anzahl der Einträge in der History eines Besuchers | 482 | ||
11.5.2 Aufruf der zuletzt besuchten Seite | 482 | ||
11.6 Zugriff auf Bildschirminformationen eines Besuchers | 483 | ||
11.6.1 Die Bildschirmaufl ösung | 483 | ||
11.6.2 Die Farbauflösung bei einem Besucher | 485 | ||
11.7 Zusammenfassung | 486 | ||
12 Browserauswertung | 488 | ||
12.1 Das Objekt navigator | 489 | ||
12.2 Die Browserkennung | 490 | ||
12.2.1 Suche nach spezifischen Informationen in navigator.appName, navigator.appVersion und navigator.userAgent | 491 | ||
12.2.2 Indirekte Identifizierung eines Browsers unter Ausnutzung eines Mangels | 495 | ||
12.2.3 Was ist die sinnvollste Identifizierungstechnik? | 497 | ||
12.2.4 Die Spracheinstellung eines Browsers | 498 | ||
12.3 Java-Unterstützung bei einem Browser testen | 500 | ||
12.4 Bestimmung, welche Plug-ins ein Browser unterstützt | 501 | ||
12.5 Bestimmung, welche MIME-Types ein Browser unterstützt | 505 | ||
12.6 Eine Browserweiche erstellen | 509 | ||
12.7 Zusammenfassung | 516 | ||
13 Zugriff auf Webformulare | 518 | ||
13.1 Das Formularobjekt | 519 | ||
13.1.1 Die Eigenschaften eine Formularobjekts | 519 | ||
13.1.2 Die Methoden | 520 | ||
13.1.3 Die Elemente in dem Webformular | 520 | ||
13.1.4 Das Objektfeld options | 522 | ||
13.2 Zugriff auf ein Webformular per JavaScript | 523 | ||
13.2.1 Zugriff auf den Wert eines Formularelements | 523 | ||
13.3 Verschicken und Zurücksetzen von Formulardaten | 538 | ||
13.4 Plausibilisieren von Formularen | 539 | ||
13.4.1 Abbruch von Aktionen | 541 | ||
13.4.2 Fehlerreaktion | 541 | ||
13.4.3 Ein Beispiel mit Plausibilisierung | 542 | ||
13.5 Zusammenfassung | 546 | ||
14 Ereignisbehandlung und das event-Objekt | 548 | ||
14.1 Grundlagen zu Ereignisobjekten | 549 | ||
14.1.1 Blubbern | 549 | ||
14.1.2 Die Informationen im Ereignisobjekt | 550 | ||
14.2 Das Ereignisobjekt verwenden | 550 | ||
14.2.1 Das Netscape-Ereignismodell | 551 | ||
14.2.2 Das Microsoft-Ereignismodell | 552 | ||
14.2.3 Die konkrete Verwertung eines Ereignisobjekts | 553 | ||
14.3 Eine universelle Ereignisbehandlung | 561 | ||
14.4 Globale Ereignisbehandlung in JavaScript | 565 | ||
14.4.1 Registrierung eines Listeners | 565 | ||
14.4.2 Das Alternativkonzept im Microsoft-Modell | 568 | ||
14.4.3 Eine universelle Funktion zur Registrierung eines Listener | 569 | ||
14.5 Zusammenfassung | 571 | ||
15 Ausnahmebehandlung | 572 | ||
15.1 Was ist eine Ausnahme? | 573 | ||
15.1.1 Wozu dient ein Ausnahmekonzept? | 574 | ||
15.1.2 Die verschiedene Ausnahmetypen | 577 | ||
15.2 Das Auffangen einer Ausnahme | 578 | ||
15.3 Selbst definierte Ausnahmen erzeugen und verwenden | 585 | ||
15.3.1 Erstellen einer selbst definierten Ausnahme | 586 | ||
15.3.2 Auswerfen von Ausnahmen | 586 | ||
15.3.3 Freie Benutzereingaben mit dem Ausnahmekonzept absichern | 591 | ||
15.4 Mehrere Ausnahmen behandeln | 595 | ||
15.5 Zusammenfassung | 596 | ||
16 DHTML und Animationstechniken | 598 | ||
16.1 DHTML mit reinem JavaScript | 599 | ||
16.1.1 Eine Animation durch Manipulation von Grafiken | 603 | ||
16.2 Verbinden von JavaScript und Stylesheets über style | 607 | ||
16.2.1 Die Eigenschaften von style | 607 | ||
16.2.2 Die Methoden von style | 612 | ||
16.2.3 Mit style eine Webseite formatieren | 613 | ||
16.2.4 Den Mauszeiger verändern | 614 | ||
16.2.5 Ein Farbwähler für die Hintergrundfarbe | 617 | ||
16.2.6 Die Webseite dynamisch verändern | 623 | ||
16.2.7 Eine Animation durch Manipulation von Grafiken (style-Version) | 627 | ||
16.2.8 Eine Interaktionskomponente dynamisieren | 630 | ||
16.2.9 Ein blinkender Text als Animation mit style | 633 | ||
16.3 Zusammenfassung | 635 | ||
17 JavaScript jenseits der Version 1.5 und ECMAScript 5 | 636 | ||
17.1 Neue Datenfeldmethoden in JavaScript 1.6 | 637 | ||
17.1.1 Methoden zum Indexzugriff | 637 | ||
17.1.2 Iterative Methoden für Datenfelder | 639 | ||
17.2 E4X – XML in JavaScript | 642 | ||
17.2.1 Erstellen eines E4X XML-Objekts | 642 | ||
17.2.2 Variablen in E4X | 645 | ||
17.2.3 Zugriff auf Attribute über das E4X–XML-Objekt | 647 | ||
17.2.4 Die Arbeit mit E4X–XML-Objekten | 649 | ||
17.2.5 Methoden eines E4X–XML-Objekts | 652 | ||
17.2.6 Der Umgang mit Objekten vom Typ XMLList | 653 | ||
17.3 JavaScript 1.7 und 1.8 | 655 | ||
17.3.1 JavaScript 1.7 | 655 | ||
17.3.2 JavaScript 1.8 | 657 | ||
17.4 ECMAScript 5 | 657 | ||
17.4.1 JSON | 658 | ||
17.4.2 Objekte schützen | 659 | ||
17.4.3 Ein paar neue offizielle Datenfeldmethoden | 659 | ||
17.4.4 Strenger Verarbeitungsmodus | 659 | ||
17.4.5 Neue Art der Objekteigenschaften und Zugriffsbeschränkungen auf Objekte | 660 | ||
17.4.6 Multithreading über Web Workers | 661 | ||
17.5 Zusammenfassung | 663 | ||
18 Fehlersuche und Fehler vermeiden | 664 | ||
18.1 Welche Fehler gibt es? | 665 | ||
18.1.1 Typografische Fehler | 666 | ||
18.1.2 Syntaktische Fehler | 667 | ||
18.1.3 Laufzeitfehler | 667 | ||
18.2 Gegenmaßnahmen – Fehler verhindern, abfangen und korrekte Versionen sichern | 668 | ||
18.2.1 Vernünftige Sicherungsmaßnahmen – Versionierung | 668 | ||
18.2.2 Fehler zur Laufzeit abfangen | 668 | ||
18.3 Fehler suchen | 669 | ||
18.3.1 Fehler ohne Debugger finden | 669 | ||
18.3.2 Fehlersuche mit einem Debugger | 671 | ||
18.4 Fehler beheben | 682 | ||
18.5 Zusammenfassung | 683 | ||
19 JsUnit – testgetriebene Entwicklung mit JavaScript | 684 | ||
19.1 Was sind Unit-Tests? | 686 | ||
19.1.1 Wie arbeitet man grundsätzlich bei testgetriebener Entwicklung mit xUnit? | 686 | ||
19.1.2 Vorzüge von TDD mittels Unit-Testing | 687 | ||
19.1.3 Probleme von TDD | 688 | ||
19.1.4 Fazit pro und contra | 689 | ||
19.2 Das Ergebnis eines xUnit-Tests | 689 | ||
19.3 Download und Installation des JsUnit-Frameworks | 689 | ||
19.4 Testseiten und Testfunktionen | 691 | ||
19.4.1 Der Aufbau von Testfunktionen | 692 | ||
19.4.2 Ausführen eines Tests über den JsUnit Test Runner | 695 | ||
19.5 Bessere Tests | 700 | ||
19.5.1 Level der Verfolgung | 700 | ||
19.5.2 Die Standardfunktionen zur Verfolgung | 701 | ||
19.6 Zusammenfassung | 707 | ||
20 Sicherheit und Optimierung | 708 | ||
20.1 Welche Sicherheitslücken weist JavaScript auf? | 709 | ||
20.1.1 Signierte Skripte und Sicherheitseinstellungen der Browser | 710 | ||
20.1.2 Das Motiv | 714 | ||
20.1.3 Was geht wirklich mit JavaScript? | 715 | ||
20.2 Wie kann man seine Skripte schützen? | 718 | ||
20.2.1 Diebstahl geistigen Eigentums | 719 | ||
20.2.2 Veränderung | 722 | ||
20.2.3 Deaktivierung durch den Anwender | 722 | ||
20.3 Optimierung | 722 | ||
20.3.1 Interpreterprinzip = langsam – JIT = schnell | 723 | ||
20.3.2 Reduzierung der Skriptgröße | 724 | ||
20.3.3 Externe JavaScript-Dateien einsetzen und Kodierung kennzeichnen | 725 | ||
20.3.4 Auf die überflüssige Erstellung von Objekten verzichten und insbesondere keine Funktionsobjekte benutzen | 725 | ||
20.3.5 Überflüssige Ausnahmenbehandlung vermeiden | 725 | ||
20.3.6 Kein eval() | 725 | ||
20.3.7 Die Anweisung with() mit Bedacht einsetzen | 726 | ||
20.3.8 Variablen bei der Deklaration immer mit einem Wert versehen und nach Möglichkeit explizit als lokal kennzeichnen | 726 | ||
20.3.9 Die Anweisung for-in kann ineffektiv sein | 726 | ||
20.3.10 Bei setTimeout() und setInterval() Funktionsreferenzen oder anonyme Funktionen verwenden | 727 | ||
20.3.11 Den DOM der Webseite nicht permanent dynamisch verändern | 727 | ||
20.4 Zusammenfassung | 727 | ||
Teil IV Kommunikation zwischen Client und Server | 730 | ||
21 Diener und Herr | 732 | ||
21.1 Die Beziehung zwischen Webserver und Browser | 733 | ||
21.1.1 Der grundsätzliche Ablauf einer Kommunikation zwischen Herr und Diener – HTTP | 733 | ||
21.1.2 Verbindungsorientierte Datenkommunikation | 735 | ||
21.1.3 Zustandslose Datenkommunikation | 735 | ||
21.1.4 Die HTTP-Details und die HTTP-Header | 735 | ||
21.1.5 Der HTTP-Request | 736 | ||
21.1.6 Der HTTP-Response | 738 | ||
21.1.7 Die Methoden der Datenübertragung per HTTP | 739 | ||
21.2 Die Meldungen eines Webservers | 741 | ||
21.3 Zusammenfassung | 742 | ||
22 Das Datenformat | 744 | ||
22.1 Binäre Ressourcen | 745 | ||
22.2 Klartextdatenformate | 745 | ||
22.2.1 Vollständige HTML- und XHTML-Dateien | 746 | ||
22.2.2 HTML-Fragmente | 746 | ||
22.2.3 Reiner Klartext | 747 | ||
22.2.4 Klartext mit Struktur und beliebiger Logik | 747 | ||
22.3 Zusammenfassung | 755 | ||
23 AJAX und das Web 2.0 | 756 | ||
23.1 Was ist AJAX und was bedeutet Web 2.0? | 757 | ||
23.1.1 AJAX als technische Basis des Web 2.0 | 758 | ||
23.2 Der grundsätzliche Ablauf einer AJAX-Anfrage und das XMLHttpRequest-Objekt (XHR) | 762 | ||
23.2.1 Der grundsätzliche Ablauf | 762 | ||
23.2.2 Ein XMLHttpRequest-Objekt erzeugen | 763 | ||
23.3 Die Anforderung von Daten | 766 | ||
23.3.1 Die Methoden eines XHR-Objekts | 766 | ||
23.3.2 Die Eigenschaften eines XMLHttpRequest-Objekts | 768 | ||
23.4 Verschiedene Datentypen vom Server per AJAX nachfordern | 770 | ||
23.4.1 Eine reine Textdatei mit AJAX nachfordern | 770 | ||
23.4.2 Übergabe von Werten an den Webserver | 779 | ||
23.4.3 Nachfordern von XML-Daten | 781 | ||
23.4.4 JSON-Daten anfordern und verarbeiten | 789 | ||
23.4.5 Ein praktisches Beispiel mit Auswertung der HTTP-Header | 792 | ||
23.5 Statusinformationen für den Anwender | 794 | ||
23.5.1 Die Auswertung des Statuscodes des Servers | 794 | ||
23.6 Zusammenfassung | 798 | ||
Teil V APIs, Frameworks & Toolkits | 800 | ||
24 Frameworks, Toolkit und APIs | 802 | ||
24.1 Was versteht man unter den Definitionen Framework, Toolkit und API? | 803 | ||
24.1.1 Framework vs. Toolkit | 803 | ||
24.1.2 Web APIs | 803 | ||
24.1.3 Für wen lohnen sich Frameworks, Toolkits und fremde APIs? | 804 | ||
24.1.4 AJAX als Titel für APIs, Frameworks und Toolkits – nur Mogelpackungen? | 806 | ||
24.2 Verschiedene Ansätze für Frameworks und Toolkits | 806 | ||
24.3 Zusammenfassung | 807 | ||
25 JavaScript-Frameworks | 808 | ||
25.1 jQuery | 809 | ||
25.1.1 Download und Installation | 809 | ||
25.1.2 Zugriff auf Elemente der Webseite | 811 | ||
25.1.3 Die Webseite durchlaufen oder manipulieren | 813 | ||
25.1.4 Praktische jQuery-Beispiele | 814 | ||
25.1.5 AJAX und jQuery | 821 | ||
25.1.6 Das jQuery UI | 825 | ||
25.2 Das Dojo-Toolkit | 827 | ||
25.2.1 Download des Dojo Toolkits oder direkte Einbindung aus dem Internet | 829 | ||
25.2.2 Ein Überblick | 829 | ||
25.2.3 Die Datei dojo.js – die Verwaltungszentrale | 831 | ||
25.2.4 Der Einstieg ins Geschäft | 831 | ||
25.2.5 Das Grundgerüst einer Dojo-Applikation | 834 | ||
25.2.6 Die require()-Methode und das Dojo-Paketsystem | 835 | ||
25.2.7 Namensräume | 836 | ||
25.2.8 Schutz des DOM – die Methode dojo.addOnLoad() | 839 | ||
25.2.9 Der Dojo-Typ und das gerenderte Widget | 840 | ||
25.2.10 Ein Beispiel mit Dojo-Widgets | 841 | ||
25.2.11 Das Dijit – Dojo Widget Library | 844 | ||
25.3 Prototype | 844 | ||
25.3.1 Der Einstieg | 845 | ||
25.3.2 Shortcuts | 846 | ||
25.3.3 Try.these() – Ausnahmebehandlung mit Prototype | 849 | ||
25.3.4 document.getElementsByClassName() | 850 | ||
25.3.5 Prototype und AJAX | 850 | ||
25.4 Zusammenfassung | 853 | ||
26 Google Web APIs und das Google Web Toolkit – GWT | 856 | ||
26.1 Die Google Web APIs | 857 | ||
26.1.1 Die gemeinsame Basis | 858 | ||
26.1.2 Das Google Maps API | 859 | ||
26.1.3 Das Google AJAX Feed API | 870 | ||
26.1.4 Das Google AJAX Search API | 873 | ||
26.2 Was ist das GWT? | 879 | ||
26.2.1 Warum mit dem GWT arbeiten? | 880 | ||
26.2.2 Kontra GWT | 883 | ||
26.2.3 Der Aufbau eines typischen GWT-Entwicklungszyklus | 884 | ||
26.2.4 Download und Installation | 885 | ||
26.2.5 Die GWT-Beispielapplikationen ausführen | 889 | ||
26.2.6 Der GWT Development Mode | 889 | ||
26.2.7 Aufruf von Applikationen im GWT Development Mode | 889 | ||
26.2.8 Erstellen einer eigenen Applikation | 893 | ||
26.2.9 Vorhandene Beispiele erweitern und modifizieren | 896 | ||
26.3 Zusammenfassung | 901 | ||
27 Web-APIs von Microsoft – Bing | 902 | ||
27.1 Das Bing API | 903 | ||
27.2 Die Windows Live ID und die AppID | 904 | ||
27.3 Das Bing API aus einer Webapplikation verwenden | 905 | ||
27.3.1 Der Umgang mit der Antwort | 907 | ||
27.4 Zusammenfassung | 911 | ||
28 Das YUI und die Yahoo! Web APIs und Web Services | 912 | ||
28.1 Die Web APIs und Web Services | 912 | ||
28.2 Das YUI | 913 | ||
28.2.1 Ein Überblick | 915 | ||
28.2.2 Die Bestandteile von YUI | 915 | ||
28.2.3 Die Struktur der YUI-Bibliothek | 916 | ||
28.2.4 Die konkrete Anwendung des YUI | 917 | ||
28.2.5 Wie gehen Sie zum Einstieg am besten vor? | 918 | ||
28.2.6 Exemplarisches Anpassen eines Beispiels | 919 | ||
28.3 Zusammenfassung | 923 | ||
A Anhang | 924 | ||
A.1 Quellen | 924 | ||
A.2 Die Buch-CD | 927 | ||
A.3 HTML und XHTML – grundlegende Details | 927 | ||
A.3.1 Steueranweisungen | 927 | ||
A.3.2 Parameter | 928 | ||
A.3.3 Strukturierung einer Webseite mit HTML | 929 | ||
A.4 Grundlagen Stylesheets | 930 | ||
A.4.1 Kaskadierung von Regeln | 930 | ||
A.4.2 Die konkrete Syntax von CSS-Deklarationen | 930 | ||
A.5 Das hexadezimale Zahlensystem | 931 | ||
A.6 Der ISO-Latin-1-Zeichensatz | 931 | ||
A.7 Add-ons für Firefox | 940 | ||
Index | 944 | ||
Symbole | 944 | ||
A | 944 | ||
B | 945 | ||
C | 946 | ||
D | 947 | ||
E | 948 | ||
F | 949 | ||
G | 950 | ||
H | 951 | ||
I | 951 | ||
J | 952 | ||
K | 952 | ||
L | 953 | ||
M | 953 | ||
N | 954 | ||
O | 954 | ||
P | 955 | ||
Q | 956 | ||
R | 956 | ||
S | 957 | ||
T | 958 | ||
U | 959 | ||
V | 960 | ||
W | 960 | ||
X | 961 | ||
Y | 961 | ||
Z | 961 | ||
Copyright | 962 |