Nepřístupné XHTML

2006-06-09 20:04 napsal Lukáš Havrlant

Není to tak dávno, co si Marty stěžoval na application/xhtml+xml, neboť mu Firefox namísto běžného zobrazení webové stránky vyhodil strašlivou dračí chybu.

Osobně se mi nezdá příliš normální, aby prohlížeč takovou chybu vyhazoval. Tedy z mě známých prohlížečů se takto chová pouze Mozilla, takže budu v tomto článku mluvit o ní, Opera se chová odlišně. Pokud pošlete XHTML stránku jako application/xhtml+xml, bude se vykreslovat jinak než běžná HTML stránka. Aby prohlížeč (opakuji, že se takto pokud vím chová jen mozilla, Safari a ostatní exotické prohlížeče neznám) stránku vykreslil, musí být XHTML dokument well-formed. Aby byl well-formed, musí být mimojiné ukončené všechny tagy. V XHTML se musí nacházet kořenový element html, který obaluje celou stránku. Což znamená, že Mozilla začne stránku vykreslovat, až když stáhne celý XHTML kód (respektive až prohlížeč narazí na </html>, pokud budou za tím ještě nějaké komentáře, nemělo by se na již čekat). Z tohoto je již jasně vidět první nevýhoda použití application/xhtml+xml – zdržuje. Pokud nemáme zrovna rychlé připojení k internetu (asi se ještě pár modemistů najde) a pokusíme se zobrazit nějaký rozsáhlejší XHTML dokument, počkáme si, zatímco při text/html by se text objevoval postupně a uživatel by již mohl spokojeně prohlížeč alespoň část obsahu.

To se ale děje, pokud je vše v pořádku. Je-li váš XHTML dokument well-formed, kromě pozdějšího vykreslení se toho moc nestane (i když na běžných stránkách to asi nebude ani znát, obzvláště pokud máte jen trochu rychlejší internet). Ovšem vtip nastává, pokud vaše stránka není well-formed. Což se prostě může stát. Nepozornost, špatně napsaný skript, nedotažený dokument… Co teď? Mozilla používá na parsování XHTML posílaného jako application/xhtml+xml obecný XML parser, tudíž pokud tam nelezne jedinou chybku, jediný neukončený tag, chybějící uvozovky či nedefinovanou entitu, vyhodí dračí chybu a víc se s tím nemaže. Konec, ze stránky neuvidíte ani prd. Zatímco při text/html by se prohlížeč snažil vykreslit alespoň něco a mnohdy by chybu zcela napravil, v případě application/html+xml prostě a jednoduše ze stránky nezobrazí nic a uživatel s tím nemůže udělat (maximálně použít jiný prohlížeč, což ho ovšem nemusí napadnout, že).

Nechce se mi bloumat, jestli je chyba v XHTML anebo v Mozille, faktem je, že splynutí Mozilly a XHTML může skončit špatně. Nepřijde mi jako vrchol přístupnosti, že díky jediné chybě, kterou koneckonců nemusí udělat ani webmaster (nedotažený dokument) se mi nezobrazí ze stránky ani čárka. Uživatel nepotřebuje vědět, že na stránce se vyskytla chyba v podobě neukončeného tagu. Stránku by měl kontrolovat validátor, ne prohlížeč – ten by se měl starat především o vykreslení. Používání application/xhtml+xml tedy považuji za zbytečný hazard, neboť tento MIME nepřináší prakticky nic dobrého, pouze snižuje přístupnost stránky (používáme-li Mozillu) ať už pozdějším vykreslením (i když v tomto případě o informace nepřicházíme, pravda, pouze se může protáhnout čekání) či vyhozením chybného hlášení (zde již uživatel o informaci přichází).

Potom ještě mohu zmínit obecný problém eXpřístupnosti:

Návštěvník potřebuje na různé stránky různé nástroje. Nezávislost se ztrácí, potřebuje HTML-prohlížeč i XHTML-prohlížeč, aby se dostal k veškerému obsahu.

Prozatím tento problém nenastává, protože snad žádná stránka neodesílá application/xhtml+xml všem prohlížečům, ale pouze těm, které tento MIME znají. Jenže jednou…

Linkuj.cz!

Komentáře

# thingwath
9. June 2006, 20:52

Já nevím proč furt všichni počítáte, že tam nějaká ta chyba bude. Nebude a nesmí být! Pokud byste třeba tvořili stránku pomocí DOM a pak jenom vyserializovali danou strukturu, těžko by se to stalo. Těžko se to stane i u dalších metod.

A pokud už by se chyba vyskytla, dá se čekat, že je vážná a mělo by se s ní něco dělat, ne ji jenom přehlédnout.

Riziko samozřejmě přichází třeba ve chvíli, kdy začnete vše drtit ručně. Když začnete vypisovat něco, co k ručnímu psaní není vhodné… Přijde mi, že tohle musí zmizet jako první. Konečně už.

9. June 2006, 22:21

Ale může tam být, chyba se prostě může objevit vždycky. Ani Texy! nebylo bezchybné (již je :-)). Kdyby se chyba nemohla vyskytnout, tak bych tu Firefoxí obrazovka smrti patrně nikdy neviděl, ale já ji viděl, několikrát (dobře, nebylo to asi víc jak deset případů, ale i to stačí, vzhledem k tomu, kolik webů application posílá), což znamená, že chyby se dějí.

Navíc co vlastně poslání XHTML jako application přináší dobrého? Možná se najdou konkrétní případy, kdy je application jednodušší, ale obecně je IMHO jednodušší poslat text/html a mohu být v klidu.

9. June 2006, 22:54

Souhlasím s tím, že nevidím důvod (nějakou výhodu) proč používat application/xhtml+xml. Jedině snad jako testovací metodu.

Pomalejší načítání stránek vem čert, je tu ještě jeden důvod – i když si sami sebou jste 100% jistí (je někdo takový, kdo ví, že nikde nikdy neudělal chybu?), má zkušenost říká, že dost velké procento zákazníků má tendence zasahovat do kódu odevzdaného díla.

Bohužel když uděláte nějakou jednoduchou stránku a ještě ke všemu je Váš kód čitelný, můžete vzít jed na to, že nejeden uživatel, který si přečetl dvě kapitoly knihy html pro lamy, se do toho začne obratem vrtat. Sice to můžete svým zákazníkům vysvětlovat jak chcete, ale to je asi tak jediné, co s tím můžete dělat.

No nic, jdu zrovna jednu takovou „předělávku“ opravit.

10. June 2006, 01:22

Opera parsuje dokument s application/xhtml+xml jako XML. Navíc ale (Opera 9) dává při chybě možnost „Reparse document as HTML“. Viz Screenshot

10. June 2006, 07:43

Opera to rieši celkom dobre. Ale na druhej strane, koľko uživateľov pochopí, že „Reparse as HTML“ im zaručí správne vykreslenie stránky?

10. June 2006, 08:48

Já se v případě application/xhtml+xml neobávám ani tak chyb typu neukončený tag či chybějící uvozovky, ale spíš prázdné znaky před vlastní XML deklarací (). Zkoušel jsem posílat správnou hlavičku (xhtml+xml), ale dost často to narazilo právě na tento problém. V případě složitějších projektů je totiž docela problém uhlídat stovky skriptů, aby některý při includování nevyhodil „prázdný znak“. Ono to jde sice doladit, ale jakmile ty skripty aktualizujete častěji, začíná to být nemilý problém… takže jsem se smířil s tím, že raději budu posílat text/html…

10. June 2006, 10:36

thingwath:

Já nevím proč furt všichni počítáte, že tam nějaká ta chyba bude.

Protože svět není bezchybnatý. Protože zkušenosti říkají, že pokud chyba může nastat, pak zřejmě dřív nebo později nastane. Protože je třeba se na takovou eventualitu připravit.

Je otázka, nakolik je taková chyba závažná. Jsou chyby, při nichž je potřeba aplikaci zmrazit – například při narušení bezpečnosti internetového bankovnictví je obrazovka „chyba, nic nefunguje“ namístě.

Myslím ale, že překlep ve zdrojovém kódu webové stránky mezi takové chyby nepatří.

Raději budu riskovat, že se mým uživatelům špatně sestaví strom dokumentu, než že uvidí žlutou obrazovku smrti.

10. June 2006, 11:23

ta chyba přece může taky nastat, pokud se někde v průběhu načítání stránky přeruší spojení, nenačte se kompletní a tím pádem stránka nebude well formed…

# Rdm
10. June 2006, 15:30

Oswald: je pěkné, že Opera něco takového nabídne, ale kolik lidí ví co znamená „Reparse document as HTML“? Kolik lidí ví co je to vůbec HTML?

Chyba se smaozřejmně může stát, ale neměla a vy proto musíte udělat všechno. Samozřemně pokud se přeruší spojení a stránka se nenačte tak to nejspíš neovlivníte, ale jak často se tohle stává a navíc myslíte si, že by vám to pomohlo, když uživatel uvidí chybu tak si řekně, že prostě se stala chyba a vrátí se pozdějí (neříkám, že všichni), ale když se stránka nedočte ceá může se mylně domnívat, že vaše stránka je „hnusná“ a nic na ní není tzn., že vás to vyjde na stejno ;o)

10. June 2006, 15:40

thingwathe – např. proto, že všem svým zákazníkům prostě weby nespravuju.. vlastně skoro žádnému.. :-)

11. June 2006, 07:57

Přístup Opery kvituji jako krok správným směrem. První krok – ještě to není tak dobré, jak by mohlo být, ale ukazuje to správnou cestu, jak (nejen) s XHTML pracovat ;-)

11. June 2006, 12:04

2thingwathe: Já s Tebou, pro změnu, souhlasím. Jistě chyba se může vyskytnout, ale to je už problém toho, kdo to tvořil.

Příkladem může být, že Vám číšník sice přinese polévku, ale studenou :-) (Ano je to jiná situace, já vím!)

Každý by si měl práci zkontrolovat a pak něco publikovat a ne si začít stěžovat na prohlížeč (ale stejně Opera je Opera, že :-)).

Takže závěrem pro ty, kteří neumějí kódovat bez chyb (nemyslím při vývoji) ať nekódují vůbec, nebo ať používají text/html.

11. June 2006, 19:33

JPAS: To je pekné. Ale pochop, že na stránke nepracuje len jeden človek. A už tu boli spomenuté aj problémy s prenosom (môžu nastať kedykoľvek).

11. June 2006, 23:08

OT: „asi se ještě pár modemistů najde“ – stačí být in a připojit se např. s T-Mobile Edge nebo ještě hůř GPRS.

12. June 2006, 08:35

Malem jsem to neustal. Procpak v tom vsichni vidi takovy problem? Pokud sestrelim (treba xor 255) nahodny bajt v /bin/bash s trochou stesti vyvaznu jen se segfaultem. Pokud sestrelim jeden bajt v kern32.dll, hadejte, jak dopadnu? Co kdyz se pri prenosu poskodi par bajtu souboru dokument.{odt,doc,zip,7z­,rar,tar,bz2}? Ja nevidim nic zvlastniho na tom, ze neni mozne pracovat s ne-well-formed daty, je to naprosto normalni. Jasne, byla by to nice feature, kdyby si Mozilla „domyslela“ co a jak, treba jako Opera, ale zakladem by rozhodne mel byt strojove citelny kod.

To, ze si za casu HTML vsichni zvykli porusovat standardy jen proto, ze se jim to libilo, je jejich problem a at tedy potom dal pisou v HTML. Pokud chcete ale posilat XML (coz XHTML rozhodne je), tak sakra MUST be well-formed.

12. June 2006, 13:07

Přesně tak, pokud nevíte jaké výhody vám XHTML může přinést, raději s ním vůbec nepracujte! To je jako byste do dieselu lili benzín, to prostě nemůže fungovat.

12. June 2006, 13:56

Aleš Roubíček

O výhodách XHTML se už snad ani bavit nechci, ale jaké konkrétní a reálné výhody mi může přinést application/xhtml+xml? Zatím jsem tedy přišel pouze na nevýhody.

# avan
17. June 2006, 18:03

JPAS:
Takže závěrem pro ty, kteří neumějí kódovat bez chyb (nemyslím při vývoji) ať nekódují vůbec, nebo ať používají text/html.

Napriklad nas na skole ucia, ze ziaden rozsiahlejsi skript(cca 5000 riadkov a viac) sa neda napisat bez chyby(teda osetrit vsetky moznosti vstupov). Jasne zavazne chyby osetrit treba, ale vsetky to proste nieje mozne. A tu je potom otazka, medzi ktore chyby zaradime napr. absenciu koncovej znacky. Btw. ta tvoja „rada“, by skoncila asi tak, ze by sme nemali ziaden internetovy prehliadac, ziaden operacny system… atd atd

# Bubák
22. June 2006, 15:23

Ve finální verzi už Opera 9 „Reparse document as HTML“ nenabízí, z beta verzí tato volba zmizela přibližně v době psaní tohoto článku.

# sranda
26. June 2006, 20:32

no podla mojho osobneho skromneho nazoru je tato stranka uplne odveci a neodporucam ju nikomu citat lebo sa unudi k smrti kym pri de nakonec:D jednoducho a proste toto je stranka pre totalnych geniov takze ak samozejme pre moju lasku ale no…proste aj tak je to odveci:) tesilo ma:) necitala smo to…racej. heh

27. June 2006, 16:08

Mně od XHTML nikdo neodtrhne, i kdyz uz vim ze pisu nespravne. I pres to, ze XHTML nedelam podle specifikace, ma XHTML alespon dalsi par vyhod. Ondra

# avan
29. June 2006, 08:36

2Ondra> ake konkretne vyhody ti teda poskytuje ked ho „nedelas podle specifikace“?

30. June 2006, 20:29

Ja fičím na well-formed XHTML. Je to teraz „IN“. Čo sa týka posielania application/xhtml+xml:
Ja som za všetkými 128-mimi (nová klávesnica). Vždy som sníval o tom, že ak bude čo i len maličká chyba v (predtým) HTML kóde, že celá aplikácia spadne.

Tak je to s programovaním (vynechajte v php skripte bodkočiarku). Áno, áno, viem, že php a XHTML je z trošku iného súdka, ale ja mám dôvod prečo si to myslieť, mám cieľ: aby sa konečne zobrazili moje stránky tak ako chcem všade rovnako.

Komentáře jsou uzavřeny