| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
KlientskΘ skripty jsou bu∩ souΦßstφ XHTML strßnky, nebo se nachßzejφ ve zvlßÜtnφm souboru a ve strßnce je na n∞ odkßzßno (tato alternativa je hned z n∞kolika d∙vod∙ vhodn∞jÜφ, viz dßle). P°i po₧adavku prohlφ₧eΦe na strßnku jsou skripty p°enßÜeny spolu s nφ a provßd∞ny v prohlφ₧eΦi.
Skripty ale zdaleka nemusφ b²t provßd∞ny ve vÜech interpretech XHTML û a¥ u₧ kv∙li omezen²m v²poΦetnφm mo₧nostem danΘho za°φzenφ (nap°. mobilnφ telefon) nebo prost∞ proto, ₧e to nenφ t°eba (nap°. u vyhledßvacφch robot∙). Zkrßtka, m∞li byste je chßpat jako n∞co, co zp°φjemnφ u₧ivateli prßci se strßnkou, poskytne mu v∞tÜφ komfort ne₧ statickß strßnka, ale rozhodn∞ ne n∞co, na Φem by strßnka m∞la b²t zßvislß. Strßnka by i bez skript∙ m∞la b²t pln∞ pou₧itelnß, tzn. m∞l by b²t p°φstupn² veÜker² obsah, m∞lo by se dßt po webu normßln∞ pohybovat atd. Tohoto stavu m∙₧ete dosßhnout, pokud si p°i testovßnφ strßnky vypnete v prohlφ₧eΦi skriptovßnφ.
Skripty se mohou provßd∞t bu∩ automaticky p°i nahrßvßnφ strßnky nebo a₧ v zßvislosti na akcφch u₧ivatele û pomocφ tzv. udßlostφ (nap°. °ekneme, ₧e p°i kliknutφ na n∞jak² nadpis v dokumentu se mß zm∞nit jeho barva). Navφc m∙₧eme pomocφ elementu noscript nadefinovat i alternativnφ obsah pro interprety XHTML, kterΘ skriptovßnφ nepodporujφ. To se hodφ p°edevÜφm tehdy, pokud naÜe strßnka nejde ud∞lat dost dob°e tak, aby jejφ plnß pou₧itelnost nebyla zßvislß na skriptech. V takovΘm p°φpad∞ m∙₧eme v tomto elementu poskytnout obsah p°φstupn² i bez skript∙ nebo odkaz na alternativnφ verzi strßnky, kterß skripty nevyu₧φvß.
Nynφ k tomu, co to vlastn∞ skripty jsou. Jednß se o instrukce urΦitΘho programovacφho jazyka, kterΘ se nachßzejφ ve tvaru b∞₧nΘho textu (nejsou tedy p°eklßdßny do binßrnφ podoby jako u klasick²ch programovacφch jazyk∙). Tento text je nßsledn∞ interpretovßn jednou ze souΦßstφ interpreta XHTML, kterΘ se °φkß scriptengine (nenapadß m∞ ₧ßdn² vhodn² p°eklad do ΦeÜtiny, jednß se doslova o äskriptovacφ motorô). V XHTML m∙₧ete pou₧φt libovoln² skriptovacφ jazyk, jedin²mi dv∞ma omezujφcφmi faktory jsou vlastnφ registrovan² MIME-typ a (samoz°ejm∞) jeho podpora v interpretech XHTML.
Element script û vklßdßnφ skript∙ do XHTML
Povolen² obsah: (#PCDATA)
Atributy:
- id ID #IMPLIED
- Obsahem tohoto atributu je jmΘno elementu.
- charset %Charset; #IMPLIED
- Hodnotou tohoto atributu je k≤dovßnφ souboru se skripty v p°φpad∞, ₧e se na n∞jak² takov² odkazujeme pomocφ atributu src. Podle m²ch zkuÜenostφ je ale nejlepÜφm °eÜenφm k≤dovat tento soubor v ASCII (pokud se obejdeme bez Φesk²ch a pokroΦilejÜφch typografick²ch znak∙) nebo stejnΘm k≤dovßnφ jako je dokument û tento postup ned∞lß souΦasn²m prohlφ₧eΦ∙m ₧ßdnΘ problΘmy.
- type %ContentType; #REQUIRED
- Tento atribut musφ b²t uveden, p°iΦem₧ jeho obsahem je MIME-typ skriptovacφho jazyka pro dan² element. P°φkladem m∙₧e b²t text/javascript pro dnes nejrozÜφ°en∞jÜφ skriptovacφ jazyk JavaScript nebo text/vbscript pro Visual Basic Script.
- src %URI; #IMPLIED
- Tento atribut specifikuje URI externφho souboru, ve kterΘm je ulo₧en skript. Pokud je tento atribut p°φtomen, interpret XHTML ignoruje obsah celΘho elementu, proto je zbyteΦnΘ ho uvßd∞t. V takovΘm p°φpad∞ by podle pravidel XML m∞l staΦit zkrßcen² zßpis <script ... />. Z d∙vod∙ kompatibility s prohlφ₧eΦi neznal²mi HTML a XML byste ho nem∞li pou₧φvat a uvΘst mφsto n∞j rad∞ji <script ...></script>.
- defer (defer) #IMPLIED
- Pokud tento boolean-atribut pou₧ijete, °φkßte tφm, ₧e skript v danΘm elementu negeneruje ₧ßdn² obsah (nap°. pokud se jednß o JavaScript, neobsahuje ₧ßdnΘ document.write). To m∙₧e opticky zrychlit naΦφtßnφ strßnky, proto₧e prohlφ₧eΦ nemusφ Φekat na v²sledek provedenφ skriptu a m∙₧e pokraΦovat ve vykreslovßnφ strßnky. Hodnota tohoto atributu musφ b²t uvedena v mal²ch pφsmenech, stejn∞ jako vÜechny hodnoty atribut∙ v XHTML, jejich₧ povolen² obsah je tvo°en v²Φtem mo₧n²ch hodnot (v tomto p°φpad∞ se v²Φet sklßdß pouze z jednΘ hodnoty).
- xml:space (preserve) #FIXED 'preserve'
- Tento atribut nepou₧φvejte, proto₧e nem∙₧e nab²vat jinΘ hodnoty ne₧ jakou u₧ mß û uvßdφm ho pouze pro ·plnost. ╪φkß, ₧e uvnit° elementu script nesmφ b²t interpretem XHTML odstra≥ovßny ₧ßdnß bφlß mφsta û obsah tohoto elementu musφ b²t v nezm∞n∞nΘ podob∞ p°edßn n∞jakΘmu skriptovacφmu jßdru interpreta. Se stejn²m atributem se setkßme jeÜt∞ u element∙ style a pre.
Element script v XHTML 1.0 Strict DTD
Element script, jak u₧ nßzev napovφdß, slou₧φ k definici skript∙ v XHTML. M∙₧e se vyskytovat v libovolnΘm poΦtu v sekci head a na urΦit²ch mφstech v sekci body, ale tφm se jeÜt∞ budeme zab²vat.
V p°φpad∞, ₧e skript generuje n∞jak² obsah (nap°. pomocφ zmφn∞nΘho document.write v JavaScriptu), je tento obsah vlo₧en na mφsto, kde se nachßzφ p°φsluÜn² element script, a pova₧ovßn za normßlnφ obsah strßnky. Z t∞chto d∙vod∙ nenφ nap°. mo₧nΘ generovat text ve skriptu, kter² se nachßzφ v hlaviΦce dokumentu. Navφc, dokument musφ vyhovovat DTD i bez obsahu generovanΘho skriptem (nem∙₧eme proto nap°. generovat element title, kter² je povinn² pro ka₧d² dokument).
Obsah elementu script obnßÜφ n∞kolik zvlßÜtnostφ û jednak v n∞m nejsou rozeznßvßny znakovΘ entity a takΘ v n∞m nem∙₧ete pou₧φt ₧ßdnΘ elementy, proto₧e obsah je deklarovßn jako #PCDATA (tedy pouze text). N∞kterΘ znaky jdou ale v XHTML zapsat pouze entitou û jednß se o < (<), > (>) a & (&), kterΘ majφ p°i p°φmΘm zßpisu v XHTML specißlnφ v²znam. Proto je za normßlnφch okolnostφ nemo₧nΘ pou₧φt tyto znaky uvnit° skriptu û bohu₧el se bez nich Φasto neobejdeme. Zde nßm ale p°ichßzφ na pomoc dalÜφ prvek XML, a sice sekce CDATA û cel² obsah skriptu uzav°eme mezi <![CDATA[ a ]]>. Tφm mßme zaruΦeno, ₧e se v tomto textu nebudou rozeznßvat znaky < a > jako zaΦßtek/konec elementu a & jako zaΦßtek znakovΘ entity. Sekce CDATA ale m∙₧e zp∙sobit problΘmy p°i interpretaci skriptu, proto₧e se nejednß o prvky skriptu. Proto je lepÜφ uzav°φt jejφ otevφracφ a uzavφracφ Φßst do komentß°∙ danΘho skriptovacφho jazyka û podφvejte se, jak by se to ud∞lalo v p°φpad∞ JavaScriptu:
/* <![CDATA[ */
... k≤d skriptu ...
/* ]]> */
</script>
Uvnit° skriptu nenφ potom logicky mo₧nΘ pou₧φt posloupnost znak∙ ]]>. Pokud byste tyto znaky pot°ebovali pou₧φt, pak asi pouze jako v²stup skriptu û zde ji₧ ale m∙₧ete pou₧φt znakovΘ entity, a proto zapφÜete cel² °et∞zec jako ]]>.
Uvnit° skriptu byste takΘ nem∞li pou₧φvat °et∞zec </ nßsledovan² pφsmenem z anglickΘ abecedy, proto₧e je HTML prohlφ₧eΦi pova₧ovßn za konec skriptovΘ sekce. Je t°eba tyto znaky zapsat pomocφ escape sekvence (<\/) nebo je rozd∞lit (v JavaScriptu '<' + '/').
V HTML bylo Φastou praxφ uzavφrat obsah elementu script do HTML komentß°∙ û starΘ prohlφ₧eΦe neznalΘ skript∙ je dφky tomu ignorovali a novΘ, kterΘ si tΘto praktiky byly v∞domy, je i p°esto interpretovaly. Tato praktika je ale chybnß v XHTML, proto₧e interpret XML je oprßvn∞n vÜechny komentß°e z dokumentu p°ed interpretacφ odstranit (a na XML budou ji₧ brzy zalo₧eny vÜechny prohlφ₧eΦe). Proto byste se m∞li tΘto praktiky vyvarovat (beztak ji₧ dnes tΘm∞° nejsou pou₧φvßny prohlφ₧eΦe, kterΘ by toto schovßvßnφ pot°ebovaly û a pokud ano, tak interpretace skriptovΘho k≤du jako textu bude u nich pravd∞podobn∞ ten nejmenÜφ problΘm, co se t²Φe XHTML 1.0).
Jak vidφte, psanφ skript∙ p°φmo do dokumentu je spojeno s celou °adou problΘm∙. Proto je lepÜφm °eÜenφm pou₧φt externφ soubor se skripty a na ten se potom odkazovat. P°inßÜφ to s sebou celou °adu v²hod:
- Nemßte ₧ßdnß omezenφ, co se t²Φe zßpisu r∙zn²ch znak∙ do skriptu (<, >, &, </, ]]>). Nemusφte nic uzavφrat do sekce CDATA ani do HTML komentß°∙.
- Odd∞lenφ skript∙ od XHTML je sprßvn∞jÜφ z hlediska logickΘ struktury dokumentu û skripty nahrajφ pouze prohlφ₧eΦe, kterΘ je znajφ, ostatnφ je bez problΘm∙ ignorujφ. Pokud jsou skripty p°φmo souΦßstφ dokumentu, musφ je p°enßÜet i prohlφ₧eΦe, kterΘ je neznajφ û to m∙₧e b²t problΘm u za°φzenφ s ni₧Üφ rychlostφ p°ipojenφ k internetu (nap°. mobilnφ telefony) a u rozsßhlejÜφch skript∙.
- Na skripty uvedenΘ v externφm souboru se m∙₧ete odkazovat ve vÜech dokumentech vaÜeho webu û prohlφ₧eΦe si je ulo₧φ do cache p°i prvnφm pou₧itφ a potom u₧ je nemusφ znovu nahrßvat. A₧ budete chtφt ve skriptech ud∞lat zm∞nu, staΦφ upravit pouze jeden soubor a zm∞na se hned promφtne do celΘho webu.
Soubor se skripty p°ipojφte tφmto jednoduch²m zßpisem, p°iΦem₧ je nejlepÜφ uΦinit tak ji₧ v hlaviΦce, aby se soubor mohl ihned zaΦφt nahrßvat:
Element noscript û alternativnφ obsah skriptu
Povolen² obsah: %Block;
Atributy:
- %attrs;
- Tato parametrickß entita obsahuje dalÜφ parametrickΘ entity:
%coreattrs; (atributy id, class, style a title),
%i18n; (atributy lang, xml:lang a dir) a
%events; (atributy onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown a onkeyup).
O tΘto parametrickΘ entit∞ jeÜt∞ budeme mluvit.
Element noscript v XHTML 1.0 Strict DTD
Element noscript dovoluje specifikovat alternativnφ obsah pro p°φpad, ₧e prohlφ₧eΦ neovlßdß skripty nebo je mß vypnutΘ. Pokud prohlφ₧eΦ ovlßdß skripty a je nakonfigurovßn k jejich interpretaci, potom obsah elementu noscript ignoruje. Pokud se ale v dokumentu objevφ skripty v jazyce, kter² neumφ, m∞l by interpretovat vÜechny elementy noscript nßsledujφcφ v k≤du strßnky po dan²ch skriptech.
Element noscript se m∙₧e vyskytovat pouze v t∞le (body) strßnky, ne v hlaviΦce. Jako povolen² obsah mß definovanou parametrickou entitu %Block;, co₧ znamenß, ₧e nem∙₧e p°φmo obsahovat text û ten musφ b²t vno°en v n∞jakΘm blokovΘm prvku, nap°. odstavci. K t∞mto v∞cem se ale jeÜt∞ dostaneme.
Udßlosti
Udßlost je dalÜφ Φßst skriptovßnφ v XHTML û dovoluje definovat, ₧e p°i urΦitΘ akci (v∞tÜinou vyvolanΘ u₧ivatelem) se provede n∞jak² skript. Udßlosti se p°i°azujφ k element∙m, p°iΦem₧ r∙znΘ elementy podporujφ r∙znΘ udßlosti. Jednou z mo₧nostφ p°i°azovßnφ udßlostφ jsou atributy XHTML element∙ û jednoduÜe v otevφracφ Φßsti elementu vepφÜeme atribut se jmΘnem udßlosti, kter² mß jako hodnotu k≤d skriptu, kter² se mß provΘst. Tento k≤d musφ b²t v implicitnφm skriptovacφm jazyce dokumentu (ten se definuje pomocφ elementu meta, viz dφl o meta-datech) a jsou v n∞m rozeznßvßny znakovΘ entity (narozdφl od obsahu elementu script), tak₧e veÜkerΘ v²skyty znak∙ <, > a & musφme psßt jako entity (a samoz°ejm∞ m∙₧eme vyu₧φvat i vÜechny ostatnφ entity definovanΘ v XHTML).
Udßlostφ je v XHTML pom∞rn∞ dost, p°iΦem₧ ty, kterΘ podporuje v∞tÜina element∙, jsou sdru₧eny do parametrickΘ entity %events;. Tato entita je potom p°ipojena do definice atribut∙ u v∞tÜiny element∙. My si nynφ entitu %events; p°edstavφme.
Parametrickß entita %events; û zßkladnφ udßlosti
VÜechny atributovΘ definice v tΘto entit∞ majφ nßsledujcφ tvar:
Parametrickß enita %events; v XHTML 1.0 Strict DTD
LiÜφ se tedy jen jmΘny udßlostφ a samoz°ejm∞ jejich v²znamem. Nynφ ji₧ tedy k samotn²m udßlostem:
- onclick
- Tato udßlost je vyvolßna, kdy₧ u₧ivatel klikne sv²m ukazovacφm za°φzenφm (typicky myÜφ) na element.
- ondblclick
- Tato udßlost je vyvolßna, kdy₧ u₧ivatel poklepe sv²m ukazovacφm za°φzenφm na element.
- onmousedown
- Tato udßlost nastane, kdy₧ u₧ivatel stiskne tlaΦφtko svΘho ukazovacφho za°φzenφ nad elementem (ji₧ ho ale nemusφ pustit û tφm se tato udßlost odliÜuje od kliknutφ).
- onmouseup
- Tato udßlost nastane, kdy₧ u₧ivatel uvolnφ tlaΦφtko svΘho ukazovacφho za°φzenφ nad elementem.
- onmouseover
- Tato udßlost nastane, kdy₧ u₧ivatel nastavφ svΘ ukazovacφ za°φzenφ nad element.
- onmousemove
- Tato udßlost nastane, kdy₧ u₧ivatel h²be sv²m ukazovacφm za°φzenφ nad elementem.
- onmouseout
- Tato udßlost nastane, kdy₧ u₧ivatel nastavφ svΘ ukazovacφ za°φzenφ mimo element (äodjedeô z n∞j).
- onkeypress
- Tato udßlost nastane, kdy₧ je klßvesa stisknuta a uvoln∞na nad elementem.
- onkeydown
- Tato udßlost nastane, kdy₧ u₧ivatel stiskne klßvesu nad elementem (ji₧ ji ale nemusφ uvolnit).
- onkeyup
- Tato udßlost nastane, kdy₧ u₧ivatel uvolnφ klßvesu nad elementem.
U t∞chto udßlostφ byste se m∞li sna₧it pou₧φvat v₧dy dv∞, kterΘ jsou zßvislΘ na jinΘm vstupnφm za°φzenφ. Vysv∞tlφm to na p°φklad∞: Pokud elementu p°i°adφte udßlost onclick, potom musφ u₧ivatel pou₧φvat ukazovacφ za°φzenφ, aby se mu skript provedl. Mnoho lidφ ale pou₧φvß pouze klßvesnici, a proto je vhodnΘ, aby i ti z toho n∞co m∞li. Proto byste m∞li p°i°adit i udßlost, kterß mß obdobn² ·Φinek, ale je zßvislß na jinΘm vstupnφm za°φzenφ û v tomto p°φpad∞ je to onkeypress (kterß je naopak zßvislß na klßvesnici). Dφky tomu bude schopno vyvolat vßÜ skript mnoho dalÜφch u₧ivatel∙, kte°φ pou₧φvajφ k ovlßdßnφ klßvesnici. Krom∞ dvojice onclick-onkeypress jeÜt∞ existujφ dalÜφ dv∞ dvojice s obdobn²m v²znamem, ale jin²m vstupnφm za°φzenφm, a sice onmousedown-onkeydown a onmouseup-onkeyup.
Nynφ jeden p°φklad na pou₧itφ udßlostφ:
Element p slou₧φ k vytvo°enφ odstavce, jeÜt∞ se jφm budeme zab²vat. K≤d udßlostφ je v jazyce JavaScript, proto by se v hlaviΦce dokumentu m∞la nachßzet tato informace:
DalÜφ udßlosti jsou ji₧ spojeny se specifick²mi elementy, proto se jimi budeme zab²vat a₧ u t∞chto element∙.
P°edchozφ Φlßnky:
- XHTML û element meta a jeho pou₧itφ
- XHTML û elementy title a base
- XHTML û zßkladnφ atributy, element head
- XHTML û zßkladnφ struktura dokumentu
- XHTML û pravidla pro chovßnφ interpret∙
- XHTML û k≤dovßnφ dokumentu
- XHTML û typy atribut∙
- XHTML û deklarace prvk∙ XHTML v DTD
- XHTML û dalÜφ prvky XHTML a DTD
- XHTML û zßkladnφ pojmy a prvky
- XHTML û v²voj (X)HTML a jeho mo₧nosti