Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
JavaScript. Zaawansowane
programowanie
Autor: praca zbiorowa
Tumaczenie: Maciej Gnicki, Adam Jarczyk, Daniel
Kaczmarek, Aleksandra Tomaszewska, Tomasz Wrona
ISBN: 83-7197-687-9
Tytu oryginau: Professional JavaScript 2nd Edition
Format: B5, stron: 1222
JavaScript jest jzykiem sieci. Jest to jzyk intuicyjny i atwy do przyswojenia.
Jego wielk zalet jest dostpno w wikszoci nowoczesnych przegldarek WWW.
Dziki JavaScriptowi moemy tworzy dynamiczne, interaktywne strony WWW. Jzyk
ten najczciej wykorzystywany jest do sprawdzania poprawnoci formularzy, tworzenia
dynamicznych menu, a take do programowania gier. Jednak moliwoci tego jzyka s
znacznie wiksze. Trudno powiedzie, czy istnieje chocia jedna komercyjna witryna
WWW, ktra nie zawiera w ogle JavaScriptu.
Ksika JavaScript. Zaawansowane programowanie zawiera wszechstronny opis
jzyka JavaScript, jego skadni i zastosowa. Na pocztek zaprezentujemy najnowsze
przegldarki i standardy stosowane w WWW, a nastpnie przedstawimy praktyczne
techniki w postaci krtkich przykadw oraz bardziej szczegowych i zoonych analiz
konkretnych rozwiza. Niniejsza ksika koncentruje si wycznie na wykorzystaniu
JavaScriptu w przegldarkach WWW, poniewa gwnie w nich jzyk ten jest
stosowany.
Dla kogo jest ta ksika?
Dla kadego, komu potrzebny jest JavaScript do tworzenia aplikacji WWW
uruchamianych po stronie klienta. Czytelnikom znajcym ju jzyk JavaScript, ksika
ta moe posuy jako aktualny, zaawansowany poradnik; natomiast tym, ktrzy znaj
ju inny jzyk programowania, pozwoli opanowa JavaScript jako now umiejtno.
Co opisuje ta ksika?
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O Autorach...................................................................................................................................................17
Wprowadzenie ............................................................................................................................................21
Cz I JavaScript w Sieci
27
Spis treci
Cz II Ku standaryzacji
273
Spis treci
Rozdzia 9. DOM.........................................................................................................................................371
Teoria i praktyka ......................................................................................................... 372
DOM poziomy 0, 1, 2 i 3 ............................................................................................. 374
Struktura drzewa DOM................................................................................................. 375
Obiekty wzw ...................................................................................................... 377
Relacje rodzic-potomek .......................................................................................... 380
Wzy Document .................................................................................................... 381
Wzy Element....................................................................................................... 382
Wzy Attribute ...................................................................................................... 383
Wzy CharacterData.............................................................................................. 383
Wzy Text............................................................................................................. 384
Dostp do arkusza stylw CSS ............................................................................... 386
Aktorzy drugoplanowi ............................................................................................. 386
Analiza implementacji w przegldarkach........................................................................ 387
Narzdzia analizy ................................................................................................... 387
Inne przydatne techniki inspekcji............................................................................. 394
Implementacje DOM w przegldarkach IE i Netscape ................................................ 395
Tumaczenie reprezentacji tabeli wedug modelu DOM .............................................. 406
Modyfikowanie drzewa................................................................................................. 407
Punkt wyjcia ........................................................................................................ 407
Rozrastanie i przycinanie ........................................................................................ 410
Zabawa z atrybutami .............................................................................................. 420
Obiekty HTMLElements .......................................................................................... 424
Co dzieje si z symbolami w wzach Text? .............................................................. 426
Modularyzacja DOM .................................................................................................... 427
Moduy DOM ......................................................................................................... 428
Strategia modularyzacji .......................................................................................... 429
Detekcja dostpnych cech...................................................................................... 430
Modele zdarze DOM .................................................................................................. 433
czenie faz przechwytywania i bbelkowania .......................................................... 433
Obiekty zdarze ..................................................................................................... 434
487
Spis treci
589
10
Spis treci
11
12
853
Spis treci
13
1023
14
Dodatki
1079
Spis treci
15
548
549
Jak widzimy, obie przegldarki wywietlaj podobne informacje o bdzie. Kada wywietla opis napotkanych bdw, plik, ktry spowodowa bd (plik rdowy albo URL) oraz
wiersz i pooenie bdu w tym wierszu. Naley zwrci uwag, e wiersz i kolumna bdu
(pozycja znaku) nie musz przedstawia dokadnego pooenia bdu. Do takiego sposobu
podawania numerw wierszy i pooenia znaku troch trudno si przyzwyczai. Powodowane jest to faktem, e interpreter JavaScriptu wywietla numer wiersza i kolumny, skd
nie potrafi przej dalej. W powyszym przykadzie z IE interpreter JavaScriptu zatrzyma
si na 7. wierszu, 4. znaku dokadnie mwic, na w wierszu . W Netscape 6
numery wartoci mog by inne z uwagi na rnice w interpreterach JavaScriptu i miejscach, od ktrych nie potrafi interpretowa skryptu. Z tego powodu warto korzysta ze
rodowiska IDE (np. Microsoft Visual .NET, Allaire HomeSite, Macromedia Ultradev itp.),
w ktrym wywietlane s numery wierszy.
550
551
Powodem, dla ktrego skrypt generuje bd, jest jego wykonanie zanim zostanie utworzone
pole tekstowe. Skrypt nie moe przypisa wartoci czemu, co nie istnieje. Sam skrypt jest
cakowicie poprawny i nie wygenerowaby adnych bdw, gdyby by wykonany po utworzeniu pola tekstowego lub gdyby zosta umieszczony w funkcji wywoanej po zaadowaniu tekstu HTML.
Bdy logiczne
Bdy logiczne s wolne od bdw skadni i czasu wykonania, lecz prowadz do niepoprawnych wynikw. Bdy logiczne nie powoduj zatrzymania wykonywania skryptu, chyba e
niezamierzone wyniki bdu logicznego w poczeniu z innym poleceniem lub skryptem
powoduj bd czasu wykonania. Usuwanie bdw logicznych jest czsto najtrudniejsze
i moe od programisty wymaga przeledzenia wartoci wszystkich zmiennych w kadym
kroku skryptu. Do czstych przyczyn bdw logicznych nale: uycie zamiast i niezgodne typy danych. Poniszy kod ilustruje, jak atwo jest wygenerowa bd logiczny:
:
#$%&'()(*+,-#.
+
-.-4<
F./4! .*G<4! .H<4! .II=
J
-4*4! .<""8 .K!
5>!9
F/-4*?=""L
>;*;!;**;8.
K89
J
. /;
3 M! . 3K*?;=<
N
J
. /;-4*;I-4=<
N
N
"#$%&
"
"
552
'48.*?<
lub:
-.
'48.<""1 !F
!
1
!!1
'48.*?<""
!
1 !
!!1
Wszystkie trzy metody daj taki sam efekt (z ma rnic dotyczc zasigu zmiennej: zmienne deklarowane niejawnie wewntrz funkcji staj si zmiennymi globalnymi): zmienna o nazwie
zostaje zdefiniowana i otrzymuje warto .
Jak widzimy, zdefiniowa zmienn jest atwo wystarczy przypisa do niej warto. Bd
otrzymamy tylko wtedy, gdy zmienna nie bdzie w ogle zdefiniowana.
Bdy niezdefiniowanych zmiennych s czsto powodowane przez literwki i bdnie stosowane due litery w nazwach zmiennych.
""
-.: !*;O13K
;<
-. *; K 4;<
F/!F
./;P
5!
1CP213
O13K
;==
J
. /;$;I( !=<
N
553
J
. /;$;I =<
N
W powyszym skrypcie s dwa powane bdy. Po pierwsze, zmienna zostaa niepoprawnie zapisana od duej litery ! . Po drugie, zmienna
"
# zostaa bdnie zapisana jako
"#. Obie pomyki powoduj podobne bdy czasu wykonania: bd
braku definicji zmiennej.
Powysze okno bdu jest wywietlane, jeeli Microsoft Script Debuger zosta zainstalowany
i wczony. Wicej informacji o tym programie przedstawimy w podrozdziale Microsoft
Script Debuger pod koniec rozdziau.
Chocia definiowanie zmiennych w JavaScripcie jest bardzo atwe, niezdefiniowane zmienne
s bardzo czstym powodem bdw wykonania. Bdy zwykle powoduje nie to, jak zmienna
zostaa zdefiniowana, lecz kiedy. Wemy na przykad poniszy kod:
F4!
!. /=
J
. /0.A=<
N
. /=<
-.0.A*;0.A;<
W tym przykadzie, chocia nie generuje bdu czasu wykonania jak poprzedni, bardzo
atwo odkry, gdzie ley problem. Zmienna
$
% jest definiowana po wywoaniu funkcji
&'
, wobec czego jest zwracana jako niezdefiniowana. W rzeczywistych przykadach
pomyki tego typu mog by trudne do znalezienia, zwaszcza e okrelone skrypty s czsto
doczane jako pliki .js, wic faktyczny kod czasami jest niewidoczny na stronie.
554
Waciwe stosowanie wci, wspomniane w poprzednim rozdziale, znacznie zmniejsza prawdopodobiestwo popenienia tej pomyki.
Kolejn czst pomyk jest zapominanie o wziciu w nawias argumentu instrukcji . Oto
przykad:
F4!
!. 4.!
/8Q4=
J
-.8% 4.!Q4*F<
F8Q4
J
8% 4.!Q4* .4<
N
. 4.!8% 4.!Q4<
N
555
Cudzysowy
Niewaciwie umieszczone znaki cudzysowu lub ich brak to pomyki popeniane powszechnie w JavaScripcie , zwaszcza gdy skrypty s generowane i kodowane dynamicznie, oraz
gdy acuchy w JavaScripcie zawieraj znaki cudzysowu.
556
spowoduje bd:
Niedomknite cudzysowy
Niedomknite cudzysowy rwnie mog wygenerowa bdy JavaScriptu. Przy pracy z acuchami w JavaScripcie wane jest poprzedzenie cudzysowu wewntrz acucha znakiem
ucieczki. Oto przykad acucha generujcego bd:
-.# .
!:G*;&
;L:;;
acuch generuje bd, poniewa znaki cudzysowu wewntrz acucha musz by poprzedzone znakiem ucieczki lub przynajmniej stosowane naprzemiennie: podwjne i pojedyncze.
Oto kilka moliwych rozwiza:
557
Dodatkowe informacje o znakach ucieczki zawiera rozdzia 2., Rdze jzyka JavaScript.
558
Operatory <> i !=
Programici ASP i VB zwykle uywaj jako rny ni. W JavaScripcie powoduje to
bd skadni, poniewa operatorem nierwnoci w tym jzyku jest ..
Generuje to bd wykonania:
559
Problemy z for in
Jak powiedzielimy w rozdziale 2., skadnia
01110 jest uywana do znajdowania nazw
wszystkich wasnoci obiektu JavaScript. Problem polega na tym, e metoda ta nie zawsze
dziaa zgodnie z oczekiwaniami; niektre wasnoci nie pojawiaj si, za cz obiektw
pozornie nie ma w ogle wasnoci. Niewiele moemy z tym zrobi, poniewa tak decyzj
o produkcie podjli autorzy interpretera JavaScript. Problem taki zwykle pojawia si tylko
wtedy, gdy dla swoich celw wycinamy wasn ciek do przegldarki..
Moemy tylko:
n
560
Skrypt wywietli poniszy alarm i przy okazji wywoa zamieszanie w obiekcie &).
Metoda 4 nie bdzie od tego momentu dostpna do tworzenia nowych okien przegldarki.
Drugim powodem stosowania wasnoci, ktrych nie mona wyliczy jest to, e niektre
obiekty macierzyste nie trzymaj si tych samych regu co JavaScript. Przykadem mog
by klasy jzyka Java, udostpniane jako obiekty macierzyste JavaScriptu w przegldarce.
Wasno JavaScriptu 51 nie jest naprawd obiektem, lecz pakietem typw obiektowych (inaczej zwanym bibliotek klas). 511 jest pakietem w 51, ale nie
jest obiektem. Pakiet to po prostu grupa pokrewnych obiektw, zgromadzonych razem.
Klasy s zapisane na dysku i przesiewanie ich w poszukiwaniu skadowych 51, ktre
mog by obiektami, nie jest zadaniem atwym, efektywnym lub choby przydatnym. I tak
przegldarka na to nie pozwala. Wobec tego ani on, ani inne pakiety zwizane z klasami jzyka Java, nie mog by wyliczane przez JavaScript.
Powyszy opis dotyczy tylko klas jzyka Java uywanych z JavaScriptu, a nie obiektw
Java uywanych z JavaScriptu. Obiekt Javy mona wyliczy przez JavaScript jak normalny
obiekt.
Zadzieranie z typami
atwo jest naprdce skleci skrypt JavaScriptu uruchamiany po stronie klienta. Jzyk o sabych typach oszczdza mnstwo czasu, ktry w przeciwnym razie trzeba by powici na
organizowanie danych waciwego rodzaju dla waciwego rodzaju zmiennych. Po ukoczeniu pracy przychodz ludzie ze szczeglnymi zdolnociami, zwani potocznie uytkownikami, i wynajduj wielkie luki w naszych skryptach. Wprawdzie JavaScript posiada beztypowe zmienne, lecz same dane s ju okrelonego typu, a uytkownicy na pewno znajd
sposb, aby skrypt wyoy si na tej rnicy.
W rozdziale 1. opisano dziaanie konwersji typw w JavaScripcie. Najczstsz puapk jest
pisanie wszystkich skryptw pod Netscape 4.0, aby potem odkry, e nie dziaaj w adnej innej
przegldarce, poniewa polegalimy na specjalnym zachowaniu operatorw JavaScript 1.2 .
i w Netscape. Odradzamy uycie podczas programowania 0/'!6'!378)
4
561
1-7 , chyba e przenono nie jest w ogle wymagana. Zapewne najbezpieczniej jest cakiem pomin atrybut /'!6'!3, poniewa JavaScript i tak jest domylnym jzykiem
skryptowym przegldarek. Jeli musimy go zastosowa, lepiej uy /'!6'!378)
47.
Jeli mamy pewno, e uytkownicy bd korzysta z naprawd nowych przegldarek, to
dobr opcj jest te /'!6'!378)
4017 lub /'!6'!378)
40197, poniewa
wtedy bdziemy dysponowa zdarzeniami obsugi bdw w tych wersjach.
Obcinanie acuchw
Uwaga na stae acuchowe, ktre zawieraj ponad 80 znakw. Niektre starsze przegldarki nie potrafi ich obsugiwa. Lepiej podzieli je na mniejsze czci tak atwiej je
czyta. W poniszym przykadzie s tylko krtkie acuchy, lecz ilustruje on zasad:
-.8
:U .
!:*;
. 5 5;
I;.4:
5 5;
I; .
5 5;<
562
W powyszym kodzie standardowa funkcja alertu JavaScript jest redefiniowana tak, e wykonuje zapis &)1
. Nastpnie definiujemy funkcj, po czym redefiniujemy j
w kolejnym bloku. Wynik ilustruje, jak wane s niepowtarzalne nazwy funkcji:
Uycie wyjtkw
W JavaScripcie wszystko, co zgasza bd lub usiuje wykona niedozwolon operacj, jest
definiowane jako wyjtek. Wyjtki, ktre nie s obsugiwane przez kod, generuj znajome
tajemnicze komunikaty o bdach systemowych i powoduj przerwanie wykonywania skryptu.
Poprzez obsug wyjtkw moemy wprowadza wasne komunikaty o bdach i uruchamia wasne funkcje obsugi bdw.
Gdy wywoywana jest funkcja lub metoda, jedynym opisanym jak dotd mechanizmem
przekazywania informacji z powrotem do fragmentu skryptu, ktry wywoa metod lub
funkcj, jest instrukcja
. Co si dzieje, gdy co idzie nie tak? Pokazuje to poniszy
przykad funkcji:
F4!
!U
5UU
/!C!2! =
J
-.-% 4.!Q4<
F/!C!I! 6V=
J
-% 4.!Q4*;.5O 4.95
O
!
;<
N
F/!C!I! GV=
J
-% 4.!Q4*;.5O 4.95
!
;<
N
J
-% 4.!Q4*!C!I! <
N
. 4.!-% 4.!Q4<
N
563
Problem z t funkcj polega na tym, e przy kadym jej uyciu wymagany jest dodatkowy
kod do sprawdzenia wartoci zwracanej. Nigdy nie bdziemy wiedzie przed tym sprawdzeniem, czy funkcja zadziaaa w sposb przydatny, czy nie. W takim przypadku moemy
by zmuszeni do przeprowadzenia dwch kontroli, po jednej dla kadego nietypowego
przypadku. Gdyby funkcja bya zoona, musielibymy przeprowadza wiele kontroli. Oto
przykad uycia tej funkcji:
-.-%4 *U
5UU
/?2W=
W Javie trudne przypadki tego typu s obsugiwane za pomoc wyjtkw. Oglnym zadaniem wyjtkw jest udostpnienie mechanizmu zgaszajcego nietypowe zdarzenia. Gdy
mamy taki dziaajcy mechanizm, moemy by pewni, e zwracane wartoci bd zgasza
tylko normalne, poprawne dane wyjciowe funkcji. Gdy zatroszczymy si o przypadki wyjtkowe, nie bdzie trzeba dodatkowo sprawdza wartoci zwracanych funkcji.
JavaScript do pewnego stopnia naladuje skadni Javy. Wyjtki stan si w przyszoci
wan funkcjonalnoci JavaScriptu. Wynika to std, e gdy chcemy uy obiektu w skrypcie, musimy dysponowa punktami dostpu, przez ktre mona dosta si do obiektu, jego
wasnoci i metod. Takie punkty dostpu razem tworz interfejs, inaczej sygnatur obiektu. W terminologii komputerowej trzema gwnymi cechami interfejsu obiektu s jego wasnoci (inaczej atrybuty), metody i wyjtki. Wobec tego w JavaScripcie wyjtki s obecne.
W Javie musimy cile deklarowa typ rzeczy, ktr jest wyjtek. Zgodnie z duchem jzyka,
w JavaScripcie wyjtkiem moe by dowolny znany element, na przykad obiekt lub acuch. Oficjaln skadni instrukcji JavaScriptu obsugujcych wyjtki przedstawilimy poniej. Najpierw tworzymy wyjtek:
. <
""1!!2!1 @11!
564
Jeli w tej funkcji instrukcja <
bdzie w ogle wykonana, to przetwarzanie funkcji zostanie zatrzymane i funkcja zwrci informacj natychmiast, lecz zamiast zwykej wartoci
zwracanej zostanie zwrcony wyjtek.
Napisany na nowo kod wywoujcy funkcj bdzie wyglda tak (dziaa w przegldarkach
Netscape 6 i Internet Explorer 5):
-.
%4 <
.
J
%4 *U
5UU
/?2W=<
F/
%4 **X=
J
. /;$.. ;=<
N
J
. /;& .:
!;=<
N
N
/...=
J
F/...**;.5O 4.95
O
!
;=
J
. /;.5O 4.95
O
!
;=<
N
F/...**;.5O 4.95
!
;=
J
. /;.5O 4.95
!
;=<
N
N
F
!
J
. /
%4 =<
N
565
Jeli instrukcja lub funkcja powodujca wyjtek nie znajduje si wewntrz bloku
", wystpi bd interpretera i skrypt zostanie zatrzymany. Jeli instrukcja lub
funkcja jest wywoana ze rodka innej funkcji, metody lub bloku
", to cay ten
zbir instrukcji zostanie rwnie zaniechany, za wyjtek bdzie przekazany wyej
do nastpnego poziomu sterowania, dopki nie zostanie napotkany blok
" lub nie
wystpi bd.
Jeli instrukcja lub funkcja powodujca wyjtek znajduje si wewntrz bloku
",
wszystkie kolejne instrukcje w bloku s ignorowane, a interpreter przeglda
wszystkie bloki ))<, jakie mog by obecne. Jeli znajdzie blok z zadowalajcymi
kryteriami, to ten blok ))< bdzie wykonany. Po wykonaniu wszystkich blokw
" i ))< zgodnie z wyjtkiem, zostaje wykonany blok ".
Jak wygldaj kryteria bloku ))<? Moliwe s dwa przypadki, przedstawione poniej:
/ =J
N
oraz
/
F ;
;==J
N
)<, wic rozsdnie jest umieci go na kocu listy blokw ))<. Zmienna
ledzi
wyjtek i w bloku ))< gra rol podobn do parametru funkcji. Blok ))< traktuje zmienn
w sposb bardzo zbliony do tego, jak poniszy skrypt traktuje zmienn
-:
F4!
!!.../...6=
J
F/...6**;...G;=
J
"".4. 19 54 .4!54G
N
F/...6**;...6;=
J
"".4. 19 54 .4!546
N
N
Skadnia wyjtkw a if
Kto, kto nigdy nie uywa wyjtkw, moe by bardzo sceptyczny wzgldem skadni, ktra
jest wymagana, aby zadziaay. Najczstsze zastrzeenia do powyszego przykadu s takie:
566
Skadnia wyjtkw jest bardziej przejrzysta, gdy wiele rzeczy na raz idzie le.
Oto przykad pokazujcy, e skadnia wyjtkw pracuje na korzy autora skryptu, a nie
przeciwko niemu:
""5 55425 O.@
3K!6V.O@!8O
.
J
""@
O1!:W 19 5O
.5 !U!
UG/=<
""@
O1!:R 19 5O
.5 !U!
U6/=<
""@
O1!:Y 19 5O
.5 !U!
U?/=<
""@
O1!:R 19 5O
.5 !U!
UR/=<
N
/-.
!:=
J
"".1
!
8:
N
Poniewa instrukcja <
natychmiast przerywa wykonanie bloku
", kada funkcja moe
nastpi zaraz po poprzedniej i na pewno pniejsze nigdy nie zostan wykonane. W tym
przypadku zaoszczdzilimy wielu testw przez uycie bloku
". Prosz zwrci uwag,
e funkcje nie musz mie wartoci zwracanej innej ni &, aby mc skorzysta z wyjtkw.
Oprcz tego nie musimy ogranicza si do zgaszania prostych typw. Oto przykad:
"":8
5
. J..U .
!:Z;,4@ 8
;2..U!48.Z6?N<
567
568
Kod modularny
Przy pisaniu skryptw w JavaScripcie wana jest jak najbardziej modularna konstrukcja
kodu. Kod modularny jest podzielony na wiele rnych funkcji, z ktrych idealnie kada
wykonuje jedno okrelone zadanie. Modularno kodu redukuje powielanie i ogln zoono skryptu. Nigdy te nie odwouje si bezporednio do zmiennych lub elementw HTML,
lecz przyjmuje je jako dane wejciowe. Jedynymi zmiennymi deklarowanymi w funkcjach s
zmienne lokalne. Zmienne zewntrzne nie s ustawiane bezporednio przez funkcje, lecz przez
warto zwrcon przez funkcj. Mona zaj za daleko z modularyzacj, zwaszcza gdy
zaczynamy pisa skrypty, ktre wykonuj lub powielaj wbudowane funkcje JavaScriptu.
Techniki uruchamiania
Dla programw w JavaScripcie dostpnych jest wiele skutecznych technik uruchamiania,
od banalnych do wyczerpujcych. Techniki uruchamiania, ktre wykorzystuj nowe okna,
pisanie do biecego dokumentu lub nowego okna oraz alerty powinny by usunite lub
oznaczone jako komentarz przed wprowadzeniem kodu do eksploatacji.
569
Alarmy
Uycie funkcji & 1
, osadzonych w skryptach JavaScript, jest najprostszym sposobem zatrzymania interpretera JavaScript w danym punkcie lub punktach podczas adowania dokumentu. Wiadomo w oknie alarmu moe te zawiera dowolne interesujce nas
dane. Jest to najprostszy sposb na uruchamianie zoonej logiki, zawierajcej mnstwo instrukcji i wywoa funkcji wystarczy doda
do podejrzanego odgazienia
funkcji i bdziemy wiedzie czy jest wykonywane, czy nie. Alarmy s te szczeglnie skuteczne w poczeniu z URL JavaScriptu. Poniszy przykad zatrzymuje wykonywanie
skryptu za pomoc alarmu, aby sprawdzi warto zmiennej po kadej instrukcji:
-.# .
!:*;$3K
. ;<
. /# .
!:=<
-.# .
!:I*;2$3K.4:;<
. /# .
!:=<
)
4>, ktr moemy w kadej chwili wpisa w polu adresu lub lokalizacji w oknie przegldarki, pozwala nam sondowa przegldark i dokument i sprawdzi, jak wyglda
aktualny stan. Poniszy przykad pokazuje URL okna:
1-.
Z. /
!
.F=<
570
Rejestrowanie w pliku
Jeli rejestrowanie wyjcia na konsoli nie jest wystarczajco trwae, skrypty JavaScript po
stronie klienta mog pisa do plikw na dysku lokalnym testowego komputera. Wystarczy
wyczy w przegldarce zabezpieczenia nie pozwalajce na tego typu zachowanie:
-...*;,5
3895. 4;<
-.E#C*!
-BC81 /;#.
!:
E
# C81 ;=<
-.E
*E#C
$. A E
/;$ZM..:
A ;=<
E
0.
!/..=<
571
Skadniki Microsoft Visual Studio (Visual Interdev, Visual Basic, Visual C++ itp.).
Windows 2000.
Jeli w rozwijanym menu pojawi si opcja Debuger skryptw, oznacza to, e program jest
ju dostpny. W przeciwnym razie, aby wczy debuger skryptw, kliknij opcj Narzdzia
na pasku menu i wybierz Opcje internetowe.
W oknie Opcje internetowe, ktre si otworzy wybierz zakadk Zaawansowane. Jeli opcja
Wycz debugowanie skryptw pod nagwkiem Przegldanie jest zaznaczona, usu jej zaznaczenie i kliknij OK. Opcja uruchamiania skryptw jest ju wczona. Uwaga: niektre
systemy wymagaj restartu IE, aby zmiana ustawienia przyniosa skutek.
572
J
. /;'
@!:>4.
;=<
. 4.!F<
N
N
"#$%&
"
CD
C8
!!
1
!9 54
5>4>4Z%%
'&)D&*+ A +!*+ A Q4+
!4 *+84 !+
!$
5*; A Q4
-4*Q.
/ A Q4
-4=;-4*;.
;
"CD
"
573
Czy potrafisz wskaza bd? Wskazwka: jest to bd logiczny, ktry pojawia si tylko
w okrelonych warunkach. Powyszy kod daje nastpujcy wynik w przegldarce:
Znamy ju szereg sposobw uruchomienia programu, wic otwrzmy nasz testowy dokument HTML (patrz powyej) w Internet Explorerze 6. Po otwarciu dokumentu w IE wybierz Widok z paska Menu, a nastpnie Debuger skryptw i Przerwij na nastpnej instrukcji.
Na koniec kliknij przycisk Przytnij (odwieenie strony nie zadziaa w naszym przypadku,
poniewa w chwili zaadowania dokumentu HTML nie s wykonywane adne instrukcje).
Debuger otwiera okno podobne do poniszego, z instrukcj, ktra wywoaa otwarcie debugera podwietlon na to:
574
Teraz jest dobra chwila na to, by objani znaczenie rnych przyciskw i menu, dostpnych w oknie Microsoft Script Debuggera:
Nazwa funkcji
Opis
Ikona
W menu
Run
Debug
Stop Debugging
Debug
Break at Next
Statement
Debug
Step Into
Debug
Step Over
Debug
Step Out
Debug
Toggle Breakpoint
Debug
Debug
Running Documents
View
Call Stack
View
Command Window
View
575
Okna debugera
Oprcz gwnego okna, ktre jest otwierane przy kadym wywoaniu debugera, dostpne
s jeszcze trzy mniejsze okna, ktre moemy otworzy, dajc wiksz elastyczno narzdzia.
Kliknij dwukrotnie dokument, aby zaadowa do debuggera skryptw lub kliknij prawym
przyciskiem myszy, aby ustawi punkt kontrolny dla nastpnej instrukcji.
instrukcji.
3. Kliknij przycisk Kliknij na stronie WWW.
4. Gdy otworzy si debuger skryptw, kliknij przycisk Call Stack, aby otworzy okno
576
wywoao debuger, natomiast okno Call Stack powinno wywietli warto JScript
anonymous function, przypisan do zdarzenia )@:
Kada wykonywana instrukcja jest dodawana u gry okna Call Stack. Zostaje usunita po
zakoczeniu wykonywania i zwrceniu sterowania do procedury wywoujcej. Aby przej
do wiersza z instrukcj zawierajc funkcj z okna Call Stack, po prostu kliknij dwukrotnie
ten wiersz. Jeli w uruchomionym dokumencie jest wicej ni jeden wtek, poszczeglne
wtki mog by wybierane z listy rozwijanej.
577
Okno Command
Okno Command wywietla informacje uruchomieniowe oparte na wpisywanych przez nas
poleceniach uruchomieniowych. Na przykad, otwrz VBTrim.html w IE i kliknij Przerwij
na nastpnej instrukcji, wpisz 000 w polu tekstowym (3 spacje i cyfr 5), a nastpnie kliknij
Przytnij. Otwrz okno polece przyciskiem Command Window. Debuger powinien wyglda tak:
Mwi to nam, e zmienna nie jest zdefiniowana, poniewa ma tylko zasig funkcji, a funkcja ta jeszcze nie zostaa wywoana.
Kliknij kilkakrotnie przycisk Step Into, a do podwietlenia instrukcji:
/.
48 .
!:/V2G=**++=
) i nacinij Enter. Teraz okno polece powinno wyglda tak:
578
Warto
wynosi teraz 000 tak warto przekazalimy. Kliknij jeszcze dwa
razy Step Into, a wrci do pierwszego wiersza <. Ponownie sprawd warto
.
Okno polece powinno teraz wyglda tak:
Zmienna
zostaa cakowicie pozbawiona spacji z pocztku. Nastpne kliknicie
przycisku Step Into powoduje przejcie do instrukcji <, sprawdzajcej obecno spacji
na kocu acucha, ktrych w naszym acuchu nie ma. Kolejne kliknicie Step Into przeniesie nas do instrukcji
. Kliknij przycisk Stop Debugging i sprawd wyniki przejcia
przez kod za pomoc debuggera w oknie IE, w ktrym strona jest otwarta. Warto w polu
tekstowym zostaa z powodzeniem przycita.
579
#$%&'()(*+,-#.
+
84::.<
F4!
!Q.
/ A !4 =
J
580
581
"" 13
:
.
* .
!:#/.
=<
""0 41F4!51 .
.
!:#>4
"" 13
:
.
* .
!:#/.
=<
"" .OK5 O! .
!:
. 4.!.
<
N
""04 5 !
!@!!5
J
. /;'
@!:>4.
;=<
. 4.!F<
N
N
F4!
! .
!:#/
!:=
J
/
!:
48 .
!:/V2G=**++=
J
!:*
!:
48 .
!:/G2
!:
!: =<
N
. 4.!
!:<
N
F4!
! .
.
!:#/.
!:=
J
/.
48 .
!:/.
!: G2.
!: =**++=
J
.
*.
48 .
!:/V2.
!: G=<
N
. 4.!.
!:<
N
"#$%&
"
CD
C8
!!
1
!9 54
5>4>4Z8.8.
!4 *; A ;!*; A Q4;
!4 *;84 !;
!$
5*; A Q4
-4*Q.
/ A Q4
-4=;-4*;&. !
1;
"CD
"
Otwrz zmieniony dokument w IE. Script Debugger powinien uruchomi si od razu, z instrukcj &
podwietlon na to. Kliknij przycisk Step Into raz, wpisz 0
4)50 do
pola tekstowego i kliknij przycisk Przytnij. Zostanie podwietlone zdarzenie )@. Kliknij
teraz 4 razy przycisk Step Into, tak by debuger przeszed do wntrza funkcji
/&4)
582
583
Zakadki
Zakadki pozwalaj nam atwo wraca do okrelonych wierszy kodu. Gdy dojdziemy do
wiersza, ktry chcemy oznaczy zakadk, wystarczy nacisn Ctrl+F2. Debuger oznaczy
taki wiersz jak poniej:
Aby przej do nastpnej zakadki, nacinij F2. Aby przej do poprzedniej, nacinij
Shift+F2. Aby usun zakadk, nacinij Ctrl+F2.
wiczenie
Omwilimy gwne funkcje programu Microsoft Script Debugger, wic pora zastosowa t
wiedz w praktyce. Wemy na przykad dokument VBTrim.html (wersj z trzema funkcjami).
584
585
Nastpnie otwrz konsol JavaScriptu i wpisz
w polu tekstowym javascript typein.
Wygeneruje to bd:
Powoduje go fakt, e konsola w ogle nie daje interakcji z kodem na stronie. Aby oddziaywa wzajemnie z tym kodem, moemy uy URL 5
)
4> w pasku adresu przegldarki, na przykad 5
)
4>
.
Aby wygenerowa waciwe wyniki za pomoc konsoli, musimy odtworzy cay skrypt lub
jego sekcj, niezbdn, aby otrzyma podany efekt.
586
Otwrz plik prefs.js w dowolnym edytorze tekstowym. Trzeba doda nastpujcy wiersz na
kocu pliku:
4.U.F/;1-.
!
!U!U...;2 .4=<
Aby zmiany odniosy skutek, plik naley zapisa i zamkn, a nastpnie ponownie uruchomi
Netscape.
Funkcjonalno automatycznego otwierania konsoli w razie bdu obecnie nie jest zaimplementowana w Netscape 6.
587
N
-.C81*! C81 <
C81
/+&.+2 $!:=<
F./-.
*G<
*W<
II=
J
C81
&.*
F/
**?=
J
C81
4! /+&.+=
N
N
"#$%&
"
"
Podsumowanie
Poniewa JavaScript jest jzykiem interpretowanym o lunej kontroli typw, bdy s czsto zgaszane bez szczegowych objanie, co poszo nieprawidowo. Istnieje mnstwo
sposobw sondowania zachowania danego skryptu, od prostych interaktywnych zapyta a
po pene graficzne rodowiska uruchomieniowe. Proste techniki s czsto wystarczajce,
aby wyszuka najpowszechniejsze przyczyny problemw. W przypadku pozostaych musimy zaakceptowa fakt, e wygoda jzyka interpretowanego z jednej strony daje nam elastyczno, lecz z drugiej nakada na autora skryptw obowizek szczeglnej starannoci.
W niniejszym rozdziale omwilimy:
n
Korzystanie z wyjtkw.
588