Jens Gyldenkærne Clausen <jens@gyros.invalid> writes:
> Previewudgaven af Firefox 1.0 (1.0 PR aka 0.10) har fået understøttelse
> af ms-egenskaben document.all. Da det kan have en hel del konsekvenser
> for javascriptforfattere, vil jeg skrive en smule om det her - og give
> nogle referencer til en del yderligere information.
Godt initiv!
> 2) Eksistenstjek på document.all returnerer undefined.
Det betyder helt præcist at i:
if (document.all) ...
bliver testen falsk, og at
typeof document.all == "undefined"
Hvis man laver logiske operationer med document.all, så tester den
også some false, altså i:
document.all && something
document.all || something
! document.all
vil document.all blive konverteret til "false".
Der er et par undtagelser hvor document.all kan ses:
- "Boolean(document.all)" er, underligt nok, true, men den bruges
sjældent, da det normalt ikke er nødvendigt eksplicit at konvertere
objekter til boolean
- "'all' in document" er true. Bruges også sjældent. Det er vist en
bevidst undtagelse (jvf kommentar 79 i det første bugzilla link).
> 3) Jeg har ikke kunnet se nogen oversigt over hvor meget af
> document.all-syntaksen der nu virker i Firefox.
....
> men kommentarerne til buggen nævner også tilfælde med sider der
> genbruger id-værdier
Der finder Mozilla kun det første element, mens IE laver en collection
af dem alle sammen (med en "length" egenskab der siger hvor mange der
er). Hvis man bruger "name" i stedet for "id", så finder de begge en
collection (og hvis man blander dem, så finder de begge kun den med
id'en (eller dem, hvis der er flere i IE))
> og tilfælde hvor document.all.foo kan svare til
> <foo> i html-koden (så vidt jeg kan læse det).
Det ikke ud til at virke i hverken Mozilla eller IE. Hvilken
Bugzilla-kommentar har du det fra? (Ja, jeg kunne jo selv lede, men
.... :)
> Jeg ved ikke om disse tilfælde er dækket ind, og har ikke
> umiddelbart mulighed for at afprøve det (da jeg heller ikke kender
> IE's standardopførsel her).
Det var en hurtig test, jeg er sikker på at der kommer mere
gennemgribende :)
> 4) Tilføjelsen af document.all-understøttelse er fulgt af endnu en
> tilføjelse der gør det muligt at tilgå elementer via navn eller id:
> document.foo => document.getElementById("foo") eller <foo>.
Jeg tror det er "window.foo" (altså en global variabel, ikke en egenskab
ved "document") der er tale om.
Faktisk har Netscape traditionelt gjort nogle elementer tilgængelige
som egenskaber på document :)
Disse globale variable er vist skjult på samme måde som document.all,
så de ser ikke ud til at være der hvis man tester på dem, men hvis man
bruger dem (tjekker en egenskab ved dem, fx) så virker det.
> Begrundelsen for at understøtte document.all er at få endnu flere
> "IE-only"-sites til at virke i Firefox.
Ja, målet er at sider der kun tror der findes IE, vil virke (en anelse)
bedre, mens sider der ved at der findes mere end en browser, og derfor
tester for sine egenskaber, vil finde de rigtige.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'