
Kompendium wiedzy na temat języka JavaScript
- Model DOM i programowanie obiektowe
- Tworzenie dynamicznych interfejsów użytkownika
- Mechanizmy komunikacji klient-serwer
JavaScript to język programowania interpretowany po stronie przeglądarki i wykorzystywany do tworzenia elementów stron WWW. Opracowany w firmie Netscape, początkowo służył wyłącznie do weryfikowania poprawności danych wprowadzanych w formularzach. Dziś ma znacznie szersze zastosowania. Przede wszystkim pozwala wzbogacić stronę WWW o elementy niedostępne w "czystym" HTML, a jego najnowsze wersje umożliwiają korzystanie z dokumentów XML oraz komunikację z usługami sieciowymi. Z tego względu JavaScript jest niemal nieodłącznym elementem nowoczesnej witryny internetowej.
Książka "JavaScript dla webmasterów. Zaawansowane programowanie" to podręcznik opisujący wszystkie możliwości języka JavaScript. Przedstawia jego historię i pokazuje, jak rozwiązywać problemy, przed którymi często stają twórcy witryn i aplikacji WWW. W książce opisano kluczowe elementy języka, takie jak zdarzenia, wyrażenia regularne oraz metody identyfikacji przeglądarki WWW i interakcji z nią, umożliwiające tworzenie dynamicznych interfejsów użytkownika. Scharakteryzowano sposoby rozszerzania języka JavaScript oraz techniki budowania mechanizmów komunikacji między klientem i serwerem bez używania elementów pośredniczących.
- Podstawowe elementy ECMAScript
- Zasady programowania obiektowego
- Osadzanie elementów JavaScript w kodzie strony WWW
- Hierarchia modelu DOM
- Korzystanie z wyrażeń regularnych
- Detekcja typu przeglądarki i systemu operacyjnego
- Obsługa zdarzeń
- Kontrola poprawności danych z formularzy
- Wykorzystywanie elementów języka XML
- Komunikacja między przeglądarką i serwerem oraz usługi sieciowe
- Bezpieczeństwo aplikacji JavaScript
Jeśli chcesz, aby Twoje aplikacje WWW działały szybciej,
skorzystaj z możliwości JavaScript.
2 O autorze (15)2 Wstęp (17)
Rozdział 1. Czym jest JavaScript? (23)
- Krótka historia (24)
- Implementacje JavaScriptu (25)
- ECMAScript (25)
- Model DOM (28)
- Model BOM (31)
- Podsumowanie (32)
- Składnia (33)
- Zmienne (34)
- Słowa kluczowe (37)
- Słowa zarezerwowane (37)
- Wartości proste i referencje (37)
- Typy proste (38)
- Operator typeof (39)
- Typ Undefined (39)
- Typ Null (40)
- Typ Boolean (40)
- Typ Number (41)
- Typ String (43)
- Konwersje (44)
- Konwersja na ciąg znakowy (44)
- Konwersja na liczbę (45)
- Rzutowanie typów (46)
- Typy referencyjne (48)
- Klasa Object (48)
- Klasa Boolean (49)
- Klasa Number (50)
- Klasa String (51)
- Operator instanceof (55)
- Operatory (55)
- Operatory jednoargumentowe (55)
- Operatory bitowe (59)
- Operatory logiczne (65)
- Operatory multiplikatywne (69)
- Operatory addytywne (70)
- Operatory porównujące (72)
- Operatory równości (73)
- Operator warunkowy (75)
- Operatory przypisania (75)
- Przecinek (76)
- Instrukcje (76)
- Instrukcja if (76)
- Instrukcje iteracyjne (77)
- Etykietowanie instrukcji (79)
- Instrukcje break i continue (79)
- Instrukcja with (80)
- Instrukcja switch (81)
- Funkcje (82)
- Nie przeładowywać! (84)
- Obiekt arguments (84)
- Klasa Function (85)
- Zamknięcia (87)
- Podsumowanie (88)
- Terminologia obiektowa (91)
- Wymogi języków obiektowych (92)
- Składniki obiektu (92)
- Posługiwanie się obiektami (92)
- Deklaracja i tworzenie egzemplarzy (93)
- Referencje do obiektu (93)
- Usuwanie referencji do obiektu (93)
- Wiązanie wczesne a wiązanie późne (94)
- Typy obiektów (94)
- Obiekty własne (94)
- Obiekty wewnętrzne (105)
- Obiekty hosta (111)
- Zakres (112)
- Publiczny, prywatny i chroniony (112)
- Statyczny nie jest statyczny (112)
- Słowo kluczowe this (113)
- Definiowanie klas i obiektów (114)
- Wzorzec fabryki (114)
- Wzorzec konstruktora (116)
- Wzorzec prototypu (117)
- Hybrydowy wzorzec konstruktor-prototyp (118)
- Metoda dynamicznego prototypu (119)
- Hybrydowy wzorzec fabryki (120)
- Którego wzorca używać? (121)
- Praktyczny przykład (121)
- Modyfikowanie obiektów (123)
- Tworzenie nowej metody (124)
- Redefiniowanie istniejących metod (125)
- Bardzo późne wiązanie (126)
- Podsumowanie (126)
- Dziedziczenie w praktyce (129)
- Implementacja dziedziczenia (130)
- Sposoby dziedziczenia (131)
- Bardziej praktyczny przykład (137)
- Alternatywne wzorce dziedziczenia (142)
- zInherit (142)
- xbObject (146)
- Podsumowanie (150)
- JavaScript w kodzie HTML (151)
- Znacznik <script/> (151)
- Format plików zewnętrznych (152)
- Kod osadzony a pliki zewnętrzne (153)
- Umiejscowienie znaczników (154)
- Ukrywać albo nie ukrywać (155)
- Znacznik <noscript/> (156)
- Zmiany w XHTML (157)
- JavaScript w SVG (159)
- Podstawy SVG (159)
- Znacznik <script/> w SVG (161)
- Umiejscowienie znaczników <script/> w SVG (161)
- Obiektowy model przeglądarki (162)
- Obiekt window (162)
- Obiekt document (174)
- Obiekt location (178)
- Obiekt navigator (180)
- Obiekt screen (182)
- Podsumowanie (182)
- Co to jest DOM? (183)
- Wprowadzenie do XML (183)
- Interfejs API dla XML (187)
- Hierarchia węzłów (187)
- Modele DOM w konkretnych językach (190)
- Obsługa modelu DOM (191)
- Korzystanie z modelu DOM (191)
- Dostęp do węzłów dokumentu (191)
- Sprawdzanie typu węzła (193)
- Postępowanie z atrybutami (193)
- Dostęp do konkretnych węzłów (195)
- Tworzenie węzłów i manipulowanie nimi (197)
- Elementy funkcjonalne HTML w modelu DOM (202)
- Atrybuty jako właściwości (203)
- Metody do pracy z tabelami (203)
- Przemierzanie w modelu DOM (206)
- Obiekt NodeIterator (206)
- TreeWalker (211)
- Wykrywanie zgodności z modelem DOM (213)
- Poziom 3 modelu DOM (215)
- Podsumowanie (215)
- Obsługa wyrażeń regularnych (217)
- Korzystanie z obiektu RegExp (218)
- Wyrażenia regularne w standardowych metodach typu String (219)
- Proste wzorce (221)
- Metaznaki (221)
- Używanie znaków specjalnych (221)
- Klasy znaków (222)
- Kwantyfikatory (225)
- Złożone wzorce (229)
- Grupowanie (229)
- Referencje wsteczne (230)
- Przemienność (231)
- Grupy nieprzechwytujące (233)
- Wyprzedzenia (234)
- Granice (235)
- Tryb wielowierszowy (236)
- Istota obiektu RegExp (237)
- Właściwości egzemplarzy (237)
- Właściwości statyczne (238)
- Typowe wzorce (240)
- Kontrola poprawności dat (240)
- Kontrola poprawności danych karty kredytowej (242)
- Kontrola poprawności adresu e-mail (246)
- Podsumowanie (247)
- Obiekt navigator (249)
- Metody wykrywania przeglądarki (250)
- Wykrywanie obiektów/możliwości (250)
- Wykrywanie na podstawie ciągu User-Agent (251)
- (Niezbyt) krótka historia ciągu User-Agent (251)
- Netscape Navigator 3.0 i Internet Explorer 3.0 (252)
- Netscape Communicator 4.0 i Internet Explorer 4.0 (253)
- Internet Explorer 5.0 i nowsze wersje (254)
- Mozilla (254)
- Opera (256)
- Safari (257)
- Epilog (258)
- Skrypt wykrywający przeglądarkę (258)
- Metodyka (258)
- Pierwsze kroki (259)
- Wykrywanie przeglądarki Opera (261)
- Wykrywanie przeglądarek Konqueror i Safari (263)
- Wykrywanie przeglądarki Internet Explorer (266)
- Wykrywanie przeglądarki Mozilla (267)
- Wykrywanie przeglądarki Netscape Communicator 4.x (268)
- Skrypt wykrywający platformę i system operacyjny (269)
- Metodyka (269)
- Pierwsze kroki (269)
- Wykrywanie systemów operacyjnych Windows (270)
- Wykrywanie systemów operacyjnych dla platformy Macintosh (272)
- Wykrywanie uniksowych systemów operacyjnych (273)
- Pełny skrypt (274)
- Przykład - strona logowania (277)
- Podsumowanie (282)
- Zdarzenia dzisiaj (285)
- Przepływ zdarzenia (286)
- Rozprzestrzenianie się zdarzeń (286)
- Przechwytywanie zdarzeń (288)
- Przepływ zdarzenia w modelu DOM (289)
- Procedury obsługi zdarzeń i słuchacze zdarzeń (290)
- Internet Explorer (291)
- DOM (292)
- Obiekt Event (294)
- Lokalizacja (294)
- Właściwości i metody (295)
- Podobieństwa (298)
- Różnice (301)
- Typy zdarzeń (304)
- Zdarzenia myszki (304)
- Zdarzenia klawiatury (309)
- Zdarzenia HTML (311)
- Zdarzenia mutacji (317)
- Zdarzenia wspólne dla wielu przeglądarek (317)
- Obiekt EventUtil (317)
- Dodawanie/usuwanie procedur obsługi błędów (318)
- Formatowanie obiektu event (320)
- Pobieranie obiektu zdarzenia (324)
- Przykład (325)
- Podsumowanie (326)
- Skrypty definiujące style (329)
- Metody modelu DOM przetwarzające style (331)
- Własne podpowiedzi (333)
- Sekcje rozwijalne (334)
- Dostęp do arkuszy stylów (335)
- Style obliczane (339)
- innerText i innerHTML (341)
- outerText i outerHTML (342)
- Zakresy (344)
- Zakresy w modelu DOM (344)
- Zakresy w Internet Explorerze (355)
- Czy zakresy są praktyczne? (359)
- Podsumowanie (360)
- Podstawowe informacje na temat formularzy (361)
- Oprogramowywanie elementu <form/> (363)
- Odczytywanie odwołań do formularza (363)
- Dostęp do pól formularza (364)
- Wspólne cechy pól formularzy (364)
- Ustawienie aktywności na pierwszym polu (365)
- Zatwierdzanie formularzy (366)
- Jednokrotne zatwierdzanie formularza (368)
- Resetowanie formularzy (368)
- Pola tekstowe (369)
- Odczytywanie i zmiana wartości pola tekstowego (369)
- Zaznaczanie tekstu (371)
- Zdarzenia pól tekstowych (372)
- Automatyczne zaznaczanie tekstu (372)
- Automatyczne przechodzenie do następnego pola (373)
- Ograniczanie liczby znaków w polu wielowierszowym (374)
- Umożliwianie i blokowanie wpisywania znaków w polach tekstowych (376)
- Liczbowe pola tekstowe reagujące na klawisze strzałek w górę i w dół (382)
- Pola list i listy rozwijane (384)
- Uzyskiwanie dostępu do opcji (385)
- Odczytywanie i zmiana wybranych opcji (385)
- Dodawanie opcji (386)
- Usuwanie opcji (388)
- Przenoszenie opcji (388)
- Zmiana kolejności opcji (389)
- Tworzenie pola tekstowego z automatyczną podpowiedzią (390)
- Dopasowywanie (390)
- Główny mechanizm (391)
- Podsumowanie (393)
- Punkt wyjścia: tablice (395)
- Metoda reverse() (397)
- Sortowanie tabeli zawierającej jedną kolumnę (397)
- Funkcja porównania (399)
- Funkcja sortTable() (399)
- Sortowanie tabel zawierających więcej niż jedną kolumnę (401)
- Generator funkcji porównania (402)
- Zmodyfikowana funkcja sortTable() (403)
- Sortowanie w porządku malejącym (404)
- Sortowanie danych innych typów (406)
- Sortowanie zaawansowane (410)
- Podsumowanie (414)
- Systemowa technika "przeciągnij i upuść" (415)
- Zdarzenia techniki "przeciągnij i upuść" (416)
- Obiekt dataTransfer (422)
- Metoda dragDrop() (426)
- Zalety i wady (428)
- Symulacja techniki "przeciągnij i upuść" (429)
- Kod (430)
- Tworzenie docelowych obiektów przeciągania (432)
- Zalety i wady (434)
- zDragDrop (435)
- Tworzenie elementu, który można przeciągać (435)
- Tworzenie docelowego obiektu przeciągania (436)
- Zdarzenia (436)
- Przykład (437)
- Podsumowanie (439)
- Znaczenie obsługi błędów (441)
- Błędy i wyjątki (442)
- Raportowanie błędów (443)
- Internet Explorer (Windows) (443)
- Internet Explorer (Mac OS) (445)
- Mozilla (wszystkie platformy) (446)
- Safari (Mac OS X) (446)
- Opera 7 (wszystkie platformy) (448)
- Obsługa błędów (449)
- Procedura obsługi zdarzenia onerror (449)
- Instrukcja try...catch (452)
- Techniki debugowania (458)
- Używanie komunikatów (458)
- Używanie konsoli Javy (459)
- Wysyłanie komunikatów do konsoli JavaScriptu (tylko Opera 7+) (460)
- Rzucanie własnych wyjątków (460)
- Narzędzie The JavaScript Verifier (462)
- Debugery (462)
- Microsoft Script Debugger (462)
- Venkman - debuger dla Mozilli (465)
- Podsumowanie (474)
- Obsługa XML DOM w przeglądarkach (475)
- Obsługa XML DOM w Internet Explorerze (475)
- Obsługa XML DOM w Mozilli (480)
- Ujednolicenie implementacji (485)
- Obsługa XPath w przeglądarkach (496)
- Wprowadzenie do XPath (496)
- Obsługa XPath w Internet Explorerze (497)
- Obsługa XPath w Mozilli (498)
- Obsługa XSLT w przeglądarkach (503)
- Obsługa XSLT w Internet Explorerze (505)
- Obsługa XSLT w Mozilli (509)
- Podsumowanie (511)
- Pliki cookies (513)
- Składniki plików cookies (514)
- Inne ograniczenia bezpieczeństwa (515)
- Cookies w języku JavaScript (515)
- Cookies na serwerze (517)
- Przekazywanie cookies między klientem a serwerem (521)
- Ukryte ramki (523)
- Używanie ramek iframe (524)
- Żądania HTTP (526)
- Używanie nagłówków (528)
- Bliźniacze implementacje obiektu XML HTTP (529)
- Wykonywanie żądania GET (530)
- Wykonywanie żądania POST (531)
- Żądania LiveConnect (532)
- Wykonywanie żądania GET (532)
- Wykonywanie żądania POST (534)
- Inteligentne żądania HTTP (536)
- Metoda get() (536)
- Metoda post() (539)
- Zastosowania praktyczne (540)
- Podsumowanie (540)
- Podstawowe informacje na temat usług sieciowych (543)
- Czym jest usługa sieciowa? (543)
- WSDL (544)
- Usługi sieciowe w Internet Explorerze (547)
- Używanie komponentu WebService (547)
- Przykład użycia komponentu WebService (549)
- Usługi sieciowe w Mozilli (551)
- Rozszerzone uprawnienia (551)
- Używanie metod SOAP (552)
- Używanie obiektów proxy WSDL (556)
- Rozwiązanie dla różnych przeglądarek (560)
- Obiekt WebService (560)
- Usługa Temperature Service (562)
- Używanie obiektu TemperatureService (564)
- Podsumowanie (565)
- Do czego służą moduły rozszerzające? (567)
- Popularne moduły rozszerzające (568)
- Typy MIME (569)
- Osadzanie modułów rozszerzających (570)
- Dołączanie parametrów (571)
- Netscape 4.x (571)
- Wykrywanie modułów rozszerzających (572)
- Wykrywanie modułów rozszerzających w stylu Netscape (572)
- Wykrywanie modułów rozszerzających ActiveX (577)
- Wykrywanie modułów rozszerzających w różnych przeglądarkach (579)
- Aplety Java (580)
- Osadzanie apletów (580)
- Odwołania do apletów w kodzie JavaScript (581)
- Tworzenie apletów (582)
- Komunikacja skryptu JavaScript z językiem Java (583)
- Komunikacja języka Java ze skryptem JavaScript (586)
- Filmy Flash (589)
- Osadzanie filmów Flash (590)
- Odwołania do filmów Flash (590)
- Komunikacja języka JavaScript z filmami Flash (591)
- Komunikacja Flasha z językiem JavaScript (594)
- Kontrolki ActiveX (596)
- Podsumowanie (599)
- Bezpieczeństwo (601)
- Polityka jednakowego pochodzenia (602)
- Zagadnienia związane z obiektem okna (603)
- Zagadnienia dotyczące przeglądarki Mozilla (604)
- Ograniczenia zasobów (607)
- Zagadnienia dotyczące lokalizacji (608)
- Sprawdzanie języka w kodzie JavaScript (608)
- Strategie umiędzynaradawiania (609)
- Zagadnienia dotyczące ciągów znaków (610)
- Optymalizacja kodu JavaScript (613)
- Czas pobierania (613)
- Czas wykonania (619)
- Zagadnienia dotyczące własności intelektualnej (635)
- Obfuskacja (635)
- Microsoft Script Encoder (wyłącznie Internet Explorer) (636)
- Podsumowanie (637)
- ECMAScript 4 (639)
- Propozycja firmy Netscape (640)
- Implementacje (646)
- ECMAScript dla języka XML (648)
- Podejście (648)
- Pętla for each...in (650)
- Nowe klasy (650)
- Implementacje (660)
- Podsumowanie (660)