středa 21. května 2008

Krůček po krůčku ke stejnému (X)HTML

Nedávno jsem na Slashdotu četl příspěvek Why Firefox 3 is Bad for Developers. Pisatel se v něm diví, proč následující zápis, ačkoliv fungoval ve Firefox 2, ve Firefoxu 3 nefunguje:
<head>
<script type="text/javascript" src="URL" />
</head>
Firefox 2 si neuzavřenou značku script uzavře, zatímco Firefox 3 ji nechá otevřenou a výsledná stránka pak nefunguje (stejně se chovala i původní Mozilla Suite a stejně se chová třeba i Internet Explorer).

Zdůrazňuji neuzavřenou značku script, protože pokud pokud je výsledný kód posílán s MIME text/html jako v citovaném případě, nemá koncové lomítko žádný význam a značka je neuzavřená. To by bylo samo o sobě na delší povídání, mě teď zajímá onen fakt, že zatímco "jedna" verzi prohlížeče se chovala nějak, další verze se chová "nějak jinak", což je také důvod, proč se onen vývojář zlobí.

Všimněte si, že mezi agumenty pro změnu, které vývojář Gecka Boris Zbarsky uvádí, je, že HTML5 toto chování vyžaduje. Je to jeden z mnoha požadavků z té části HTML5, která nepřidává do HTML žádné nové vlastnosti, ale upřesňuje ty stávající až do (aspoň podle autorů) všech nutných detailů.

Noční můra webdesignerů aneb na co jsme si zvykli

V tomto případě jsou obě varianty (jak <script></script>, tak <script />) z pohledu XHTML správné, a jsou také obě validní, ovšem ta druhá v některých prohlížečích fungovat nebude. Svět prohlížečů je tak pro vývojáře noční můrou, protože ačkoliv píše podle učebnic, validuje svůj výsledek a podívá se na něj ve svém prohlížeči, nic mu nezaručí, že to celé bude fungovat i v některém z dalších prohlížečů. A výše zmíněný případ je jen jedním z mnoha.

A ačkoliv jsme si na to zvykli, někde uvnitř každého webdesignera určitě hlodá pochybnost, že to tak vlastně ani nemuselo být. Že se jen někde stala chyba a nikdo ji zatím neopravil.

A tím se od současné noční můry dostáváme k pohádce (ono se to zatím jinak než pohádka nazvat nedá).

Pohádka pro webdesignéry

Pokud se máme jednoho krásného dne probudit, otevřít okno (myšleno prohlížeče) a zjistit, že (X)HTML je ve všech prohlížečích interpretováno nachlup stejně (a tento pohádkový cíl skutečně je jeden z cílů HTML5), pak to znamená, že chování každého dnešního prohlížeče se musí trochu změnit. Tu více, tu méně. Při tom se nevyhneme tomu, že co včera v jednom prohlížeči fungovalo, v něm nemusí fungovat zítra (viz ten případ s Firefoxem 3). To je daň, které se nelze vyhnout.

HTML5 se snaží ono "jednotné chování (X)HTML" definovat tak, aby bylo pokud možno kompatibilní se stávajícím chováním většiny prohlížečů a stávajícím používáním (X)HTML na Webu. Tedy, aby ta daň byla co nejmenší. Jako vedlejší efekt se tak zároveň vzdaluje teoretickému návrhu ideálně čistého HTML, právě proto, že se tu a tam musí přizpůsobit (což je druhé zdanění).

A kdy že to bude?

Zatím se k pohádkovému cíli jednotného (X)HTML krůček po krůčku blížíme, viz ten případ s Firefoxem, který je jen jedním z mnoha. V nejbližších 5 letech se ho určitě nedočkáme, ale pokud se splní představy tvůrců HTML5, měl by nastat do ukončení vývoje specifikace, tedy odhadem někdy do roku 2022.

Pak se možná splní rčení Iana Hicksona Things that are impossible just take longer. A pak uvidíme, zda se tahle pohádka pro další generace webdesignerů stane skutečností nebo zůstane navždy jen pohádkou.

Tak a teď dobrou noc děti, ráno vás opět čeká vaše noční můra, aspoň prozatím.

8 komentářů:

  1. Pro vsechny vyvojare, kteri nekde v procesu stavby markupu na serveru pouzivaji nastroje pro praci s XML, je tohle kopanec do kouli... Doufal jsem, ze tenhle neduh IE bude odstranen a ono je to naopak...

    XSLT 2.0 nastesti definuje output mode, ktery tohle resi, ale napriklad psat JSP v XML modu znamena cpat do kazdeho scriptu &#160; ... :/

    OdpovědětVymazat
  2. Proč by s tím měli mít problém? XSLT už od první verze má možnost pro výstup nastavit method="html". On to v tomhle případě ten IE měl skutečně správně a je dobře, že se mu ostatní přizpůsobí.

    OdpovědětVymazat
  3. No já osobně v xslt 1.0 (aspoň teda při vývoji na ms platformě) při použití kteréhokoliv prázdného párového elementu dostanu na výstupu automaticky element nepárový
    (i v output=html) - tedy i [script /], což se bohužel musí neprakticky řešit uvnitř těmito pevnými mezerami. Tohle IMHO ale není neduh HTML, nebo prohlížečů, i když by bylo fajn, pokud by se stím korektně vypořádali.

    OdpovědětVymazat
  4. Oni to i v html módu zkrátí? Pak je to ovšem těžce zavlečená chyba. V HTML nepárový script nemá co dělat. Tohle se musí opravit na straně XSLT procesorů.

    OdpovědětVymazat
  5. > tedy odhadem někdy do roku 2022.

    Tak to se načekáme :/ (nebo nedočkáme).

    OdpovědětVymazat
  6. Me teda <script src="foo"></script> dost vadi. Nerikam, ze to neni dobre, ale je to vylozene nasravaci. OK, jasne, tyhle veci mam generovane, ale prece jenom tu a tam clovek pise i statickou stranku nebo proste chce, aby vysledek nejak vypadal ...

    OdpovědětVymazat
  7. Tento komentář byl odstraněn autorem.

    OdpovědětVymazat
  8. Martin Hassman: HTML mód XSLT procesoru neznamená, že procesor skutečně použije DTD HTML. Znamená to jenom to, že prázdné značky [foo/] se převedou na [foo]. To je všechno.

    To ale není vůbec pěkný, jak blogspot bez upozornění vyhazuje všechny tagy, co připomínají HTML :(

    OdpovědětVymazat

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.