Problém je ve většině případů způsoben používáním document.all
a document.layers
. Jde o zastaralé objektové modely prvních opravdu použitelných prohlížečů. Document.all
přišel spolu s MSIE 4, document.layers
přinesl Netscape Communicator 4 v době tzv. "války prohlížečů". Oba modely jsou nestandardní a další verze těchto prohlížeču podporují standardizovaný DOM. Nekvalitní a v řadě případů také zastaralá literatura, nevhodné editory a zažité postupy však tyto modely stále používají.
Jelikož se prohlížeče MSIE 4 a Netscape 4 již prakticky nevyskytují, je oprava za použití DOM jednoduchá. Stačí provést v javascriptovém kódu následující záměnu:
document.all.id-objektu.hodnota
->document.getElementById("id-objektu").hodnota
document.layers.id-objektu.hodnota
->document.getElementById("id-objektu").hodnota
Pro případ, že i přesto chcete podporovat "čtyřkové" prohlížeče (za cenu ztráty řady vlastností v DOM), se nabízí v JavaScriptu následující řešení:
var IE=(document.all)?1:0; var NS=(document.layers)?1:0; var DOM=(document.getElementById)?1:0; function GetObject(obj) { if (DOM) myObject=document.getElementById(obj); else if (IE) myObject=eval('document.all.'+obj); else if (NS) myObject=eval('document.layers.'+obj); return myObject; }
Potom místo document.all
, document.layers
i document.getElementById
stačí používat univerzální funkci GetObject
. Tedy například GetObject("id-objektu").hodnota
Související odkazy
- Document.all - omezená podpora v prohlížečích Mozilla (czilla.cz)
- Aspoň kousek DOMu (jakpsatweb.cz)
- W3C Document Object Method (w3.org)
- Weby s chybou document.all (Technická evangelizace)
Informace o původním dokumentu
- Autor: Josef Kotva