Alespoň kousek DOMu

Mnoho javascriptů fungujících pouze v Internet Exploreru lze relativně snadno přepsat i pro Mozillu a další moderní prohlížeče.

Pixy psal o jakýchsi stránkách JME a stěžoval si, že nejsou vidět. Autoři kódu to totiž překombinovali: celou stránku skryli a spolehli se na javascript, že ji zase zviditelní. To je samo o sobě velmi nešťastné řešení, ale jestě navíc byl ten javascript napsán pouze pro Internet Explorer s využitím objektu window.document.all. Cituji Pixiho:

document.all('main').style.visibility = 'visible';
Což je příkaz, který obsah stránky opět zviditelňuje -- ovšem v takovém tvaru, o kterém už dnes i prvňáček javascriptové školky ví, že je nestandardní a platí pouze pro prohlížeč MSIE. Standardní DOM -- který používají nejen všechny ostatní prohlížeče, ale i onen MSIE -- žádné pole ani metodu document.all nezná a pro přístup k prvkům dokumentu používá jiné prostředky.

Svatá pravda. Nepočítám ale s tím, že se všichni orientují v záludnostech rozdílů objektových modelů prohlížečů, někdy mě fascinuje, jak i zdánlivě zkušení skriptaři vůbec nevědí, která bije. Takže žádná javascriptová školka. Včera večer jsem si o tom psal s nějakým Legolasem a dospěl jsem k závěru, že by stálo za to se o tom rozepsat. Napřed krátký úvod do historie.

Objektový model dokumentu je způsob, jakým lze přistupovat k jednotlivým prvkům stránky. Ve trojkových prohlížečích Netscape Navigator 3 a Internet Explorer 3 (v plné slávě byly kolem roku 97) se dalo javascriptem přistupovat jen k několika málo věcem na stránce -- k obrázkům, formulářům, k barvě pozadí stránky a něco málo navíc. Vrcholem efektů byla záměna obrázků při přejetí myší (asi díky tomu se stále tolik používají obrázkové odkazy) nebo spočítání znaků esemesky. Možnosti velmi omezené, pěkná otrava.

Internet Explorer verze 4 byl v tomto ohledu revoluční prohlížeč. Nejenom že přinesl relativně slušnou podporu CSS (včetně např. pozicování), ale hlavně umožnil přístupovat javascriptem ke každému objektu na stránce, který měl atribut id. K tomu využíval pole document.all. Takže mám třeba nějaký <div> s id:

<div id="pokus">pokusný div</div>

a můžu ho stylem a skriptem v Internet Exploreru třeba zneviditelnit (stylem visibility) od IE4:

<script>
document.all("pokus").style.visibility = "hidden";
// nebo
// document.all.pokus.style.visibility = "hidden";
</script>

Samozřejmě se na to dají aplikovat i jiné styly a další skopičiny, například se dá změnit obsah toho prvku (vlastností innerHTML).

Zdůrazňuji, že objekt document.all je nestandardní a jde o výmysl Microsoftu. Ve své době (myslím od roku 98) to ale bylo něco úžasného, a tak se to všichni tehdejší skriptaři naučili. Konkurenční prohlížečeč Netscape Navigator 4 objekt document.all ani žádnou odpovídající náhradu neměl, což mu podle mého názoru ubralo mezi autory dost popularity. Z této doby nám na webu zůstaly skripty, které než něco provedou, pečlivě a zdlouhavě si otestují verzi prohlížeče. A pro Explorer všude využívají document.all. Podpora nestandardního document.all vydržela v Exploreru dodnes a částečně se o něj snaží i Opera.

Nebudu to protahovat, bylo by to na další seriál. Dneska už Internet Explorer 4 ani Netscape Navigator 4 běžně nepotkáváme. Všechny dnešní běžné prohlížeče (Mozilla, Opera, Safari, Explorer včetně verze 5.0) podporují alespoň část standardního DOM. V DOM má exporeří objekt document.all docela slušnou náhradu v metodě getElementById(). Předchozí příklad se zneviditelněním divu by šel snadno přepsal tak, aby fungoval všude:

<div id="pokus">pokusný div</div>
<script>
document.getElementById("pokus").style.visibility = "hidden";
</script>

Toť vše. Pokud si projdete svoje (nebo cizí) staré skripty a document.all v něm nahradíte zápisem document.getElementById(), máte dost slušnou šanci, že to začne fungovat například v Mozille. Upozorňuji, že se nejedná o nijak čisté a krásné skriptování. Je to spíše taková záplata -- vezmu si z DOM to, co potřebuju (getElementById()), a zbytek doplním nestandardním (ale podporovaným) rozšířením prohlížečů. Dnes se javascripty takhle pragmaticky leckde píšou, a ... funguje to.

Doplnění Romana Pichlíka: konflikt id a name u formulářových prvků v MSIE, Dagblog.

 

Publikováno 10. března 2004

Tento článek je původně z weblogu

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Články Katalog zdrojů SEM SEO

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.