Internet Explorer implementuje HTML5

Zatímco trojice prohlížečů Safari, Opera a Firefox již před časem začala s implementací HTML5, vyvstávaly pochyby kdy, a zda vůbec, bude HTML5 implementovat Internet Explorer. Nejistotu rozvířilo nedávné vydání první beta verze Internet Exploreru 8, která kromě jiných webových standardů obsahuje i implementaci části specifikace HTML5.

Nejprve musíme připomenout, že specifikace HTML5 není zdaleka hotová, teprve letos v lednu vydalo W3C její první pracovní návrh. Přesto prohlížeče části této specifikace již implementují a Internet Explorer není výjimkou. Internet Explorer 8 zatím neimplementuje významný podíl HTML5, jedná se o implementaci několika nezávislých částí, řekněme odhadem několika málo procent celé specifikace.

Byť se to zdá málo, jedná se o důležité gesto většího významu. Vývojáři Internet Exploreru totiž na rozdíl od vývojářů jiných prohlížečů stáli od HTML5 dosud trochu stranou a nebylo jisté, zda budou tento vznikající standard akceptovat. To, že se do krajíce HTML5 nyní naplno zakousli, dává naději, že s dalšími verzemi svého prohlížeče dojí tento krajíc celý.

Podívejme se, jaké části HTML5 si vývojáři Internet Exploreru vybrali a zda se jim implementace podařila.

AJAX s historií

AJAX je dobrý sluha, ale zlý pán. Objevuje se ve většině nových webových aplikacích a je stále na vlně zájmu, ačkoliv s sebou přináší řadu problémů. Jedním z nich je matení uživatelů. Uživatelé, kteří si navykli používat tlačítka prohlížeče Zpět a Vpřed, zjišťují, že na stránkách používajících AJAX tato tlačítka nefungují.

HTML5 přináší hned dvě řešení. První je určeno jednodušším aplikacím a zavádí událost hashChange, která se vyvolá kdykoliv se změní identifikátor fragmentu webové adresy (část webové adresy nacházející se za znakem hash „#“). Aplikace postavená na AJAXu tak může využívat identifikátor fragmentu webové adresy, který v jejím případě neoznačuje žádný existující fragment stránky, ale je používán pro identifikaci konkrétních stavů aplikace (podobně to dělají některé aplikace již dnes, např. www.mapy.cz). Aplikace si zaregistruje obslužný kód onhashchange, který odchytí stisknutí tlačítek Zpět či Vpřed a může tak simulovat procházení historií, které uživatel očekává.

Druhý způsob je určen náročnějším aplikacím, kde není ukládání stavu do webové adresy vhodné řešení. Taková aplikace pro uložení svého stavu použije libovolný JavaScriptový objekt a při každé změně svého stavu jej uloží pomocí funkce history.pushSta­te(). V případě stisknutí tlačítka Zpět nebo Vpřed prohlížeč vyvolá událost PopStateEvent a nabídne aplikaci zpět objekt s popisem uloženého stavu. Je již na aplikaci, aby podle něj svůj stav správně obnovila. Uživatel tak opět může procházet historií a prohlížeč sám ohlídá, kdy má změnit webovou adresu stránky a kdy jen vyvolat její uložený stav.

Internet Explorer 8 zatím implementoval pouze první řešení a jedná se o první prohlížeč vůbec, který se do implementace pustil. Lze předpokládat, že další prohlížeče budou jeho příkladu brzy následovat.

Signalizace připojení k síti

Internetové připojení není dokonalé, abychom mohli být neustále online. A přitom současné webové aplikace jsou na online připojení závislé. To autoři HTML5 plánují změnit a umožní mj. tvorbu offline webových aplikací.

HTML5 definuje vlastnost navigator.onLine, pomocí které si webová aplikace ověří, zda je síťové připojení dostupné či nikoliv. Dále HTML5 definuje dvě události online a offline pro přechod mezi oběma stavy. Webová aplikace je tak upozorněna jak na přerušení síťového spojení, tak na jeho obnovení.

Internet Explorer 8 implementuje vlastnost online i obě přechodové události (kromě něj je zatím částečně implementoval pouze Firefox). K tvorbě skutečných offline webových aplikací to ještě stačit nebude (jejich specifikace v HTML5 je složitější a stále se vyvíjí), ale webové aplikace se zatím alespoň budou schopné elegantně vypořádat s krátkodobými výpadky spojení.

Komunikace mezi webovými stránkami

Pokud část webové aplikace pochází z jiného zdroje, nemusí být schopná komunikovat s hlavní stránkou (např. gadgety zobrazené v iframu stránky načítající se z jiné domény). Tak tomu je z bezpečnostních důvodů. Ovšem v některých případech je výhodné tuto bezpečnostní bariéru alespoň trochu pootevřít, což HTML5 umožňuje.

Jedná se o zasílání zpráv mezi jednotlivými dokumenty (resp. okny) stránky. Pomocí metody target_window­.postMessage() je možné zaslat textovou zprávu jinému dokumentu nezávisle na tom, z jaké domény pochází. Pokud cílový dokument odchytává událost message, může zprávu přijmout a zpracovat. Komunikace nemusí proběhnout pouze jednoduše a jednosměrně, mezi jednotlivými dokumenty může vzniknout živý dialog na základě dohodnutého protokolu.

Zde je nutné podotknout, že specifikace se během svého vývoje změnila. Událost message, která původně byla vyvolávána na objektu document, je nyní vyvolávána na objektu window. Ke změně došlo loni v srpnu, ovšem Internet Explorer 8 se při implementaci řídí původním stavem specifikace. Sluší se poznamenat, že stejný problém postihl i Operu, jejíž vývojové verze rovněž implementují původní specifikaci. Bude zajímavé sledovat, zda vývojáři do ostré verze chování aktualizují a zabrání tak roztříštěnému používání napříč jednotlivými prohlížeči.

Internet Explorer 8 se tak v tomto případě přidává k prohlížečům Firefox, Opera a Safari, které komunikaci mezi webovými stránkami již implementovali.

Datové úložiště

Pro ukládání dat na straně klienta definuje HTML5 tři datová úložiště: sessionStorage, globalStorage a client-side database storage. Jejich použití se nabízí nejen pro offline webové aplikace, ale i pro zlepšení aplikací stávajících. Internet Explorer 8 z úložišť implementuje sessionStorage a globalStorage, a následuje tak prohlížeč Firefox, který je implementoval jako první.

Zatímco sessionStorage slouží k dočasnému uložení dat v rámci jednoho uživatelského sezení, na jehož konci bude automaticky smazáno, globalStorage je určeno pro uložení dat i mezi jednotlivými sezeními. Práce s úložišti je z pohledu programátora příjemná a mohou tak brzy vytlačit některé případy použití cookies, zejména ty, u kterých není zapotřebí zasílat uložená data mezi serverem a klientem při každém HTTP požadavku.

Po vydání prvního pracovního návrhu HTML5 byla tato specifikace změněna, zjednodušena a globalStorage bylo přejmenováno na localStorage. Internet Explorer 8 se při implementaci inspiroval původní verzí specifikace. Podobný osud postihl i prohlížeč Firefox, jehož implementace rovněž odpovídá původnímu pracovnímu návrhu. I takový je někdy smutný osud raných implementátorů.

Považuji za hodně pravděpodobné, že oba prohlížeče prozatím ponechají implementace v současném stavu, vydají je v této podobě i v ostré verzi, a teprve v dalších verzích budou implementovat nový stav specifikace. Ostatně přejmenování globalStorage na localStorage bylo provedeno právě proto, aby umožnilo zajistit současně zpětnou kompatibilitu i další rozvoj.

Uvidíme, zda ono shodou náhod vzniklé nevhodné načasování během let ze světa webových aplikací vymizí, nebo jej poznamená jednou provždy a v budoucnu se budeme setkávat jak s globalStorage, tak s localStorage s odlišným rozhraním.

Nedodržování specifikace Internet Explorerem

V souvislosti s implementací datových úložišť v Internet Exploreru nesmíme přehlédnout jednu zajímavost. Na rozdíl od předchozích bodů, které jsou implementovány v souladu s HTML5 specifikací (nebo v souladu s jejím dřívějším stavem), datové úložiště si vývojáři Internet Exploreru upravili k obrazu svému. Vývojáři si nejen přidali své vlastní metody, ale hlavně upravili celé chování úložiště ze synchronního na asynchronní, což bude způsobovat problém při používání jednoho kódu v různých prohlížečích. (A bohužel se nejedná o jediný takový problém IE8.)

Poněkud komické pak je, že vedoucí architekt Internet Exploreru, Chris Wilson, je zároveň předsedou pracovní skupiny, která u W3C specifikaci HTML5 vytváří. Ačkoliv si po delší dobu musel být vědom toho, že vývojový tým Internet Exploreru nezávisle vytváří odlišnou specifikaci, nedokázal pracovní skupinu pro HTML informovat.

Přitom HTML specifikace vzniká právě za dohody výrobců prohlížečů. V případě, že některý z nich má ke specifikaci vážné připomínky, je specifikace zpravidla upravena tak, aby mu vyhověla. V případě ostatních prohlížečů tímto způsobem došlo ke kompromisu již nespočetněkrát. Tím, že tým Internet Exploreru, na rozdíl od týmů všech ostatních prohlížečů, odmítá vést tento dialog, se tak pomyslně vzdává práva společnou specifikaci ovlivňovat a vytváří si tak svou vlastní specifikaci nekompatibilní se zbytkem světa. Internet Explorer, nakolik zůstává výrazným hráčem na trhu, bude tak bohužel i nadále považován za hráče, jehož přínos pro další rozvoj webu je přinejmenším sporný.

KL_NOMINACE

Nedomnívám se, že by tak vývojový tým Internet Exploreru činil naschvál a ve zlé vůli. Je možné, že se těchto prohřešků dopouští nevědomky nepochopením základních pravidel, která již po léta doprovázejí vývoj webu jako takového. Neuvědomuje si, že zatímco v jiné oblasti by podobné jednání snad bylo tolerováno (a možná i nazváno konkurenční výhodou), v oblasti webových technologií je podobné chování neakceptovatelné. Vývojový tým Internet Exploreru si tato pravidla „slušného chování“ dosud neosvojil (pravidla slušného chování se nedají vymáhat, je třeba se je postupně naučit) a k tomu, aby se stal respektovaným partnerem pro diskusi o budoucnosti webových technologií, ho čeká ještě dlouhá cesta.

Shrnutí

Části HTML5 implementované první beta verzí Internet Exploreru 8 jsou užitečné a po rozšíření finální verze IE8 se začnou jistě rychle používat. Ovšem těm náročnějším nezbývá než čekat na další, pravděpodobně devítkovou, verzi prohlížeče, která pravděpodobně přinese implementaci podstatnější části HTML5, a přát si, aby nám v ní vývojový tým Internet Exploreru nepřichystal další nemilá překvapení.

Anketa

Je pro vás fakt implementace HTML5 do Internet Exploreru dobrou zprávou?

15 názorů Vstoupit do diskuse
poslední názor přidán 31. 3. 2008 16:12

Školení Google Analytics pro pokročilé

  •  
    Jak využít nové funkce Google Analytics
  • Vyhodnocování pomocí Multichannel funnels
  • Neopakujte chyby při vyhodnocování dat.

Informace o školení Google Analytics pro pokročilé »