/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
document.all-understøttelse i Firefox 1.0P~
Fra : Jens Gyldenkærne Cla~


Dato : 14-09-04 15:36

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.

Her er et par noter
1) Document.all kan kun benyttes i Quirks Mode-dokumenter. For
dokumenter der sætter standardmode, opfører Firefox sig præcis som før -
og document.all kan altså ikke bruges.

2) Eksistenstjek på document.all returnerer undefined. Årsagen til at
returnere falsk er at man ikke vil ødelægge virkemåden af scripts der
bruger document.all-understøttelse til at afgøre at der er tale om IE.
En if(document.all){ X } else { Y } vil således vælge Y - og det samme
gælder hvis man tjekker med if(typeof(document.all) == "object").

3) Jeg har ikke kunnet se nogen oversigt over hvor meget af
document.all-syntaksen der nu virker i Firefox. Det simple tilfælde hvor
document.all.foo kan oversættes direkte til
document.getElementById("foo") er selvfølgelig på plads, men
kommentarerne til buggen nævner også tilfælde med sider der genbruger
id-værdier og tilfælde hvor document.all.foo kan svare til <foo> i
html-koden (så vidt jeg kan læse det). 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).

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>. Dette har
jeg slet ikke kigget nærmere på, men der er også en bug-rapport om det
(se link nedenfor)

Begrundelsen for at understøtte document.all er at få endnu flere
"IE-only"-sites til at virke i Firefox. Jeg har endnu ikke prøvet sites
hvor document.all-tilføjelsen har gjort en forskel - men det er heller
ikke mere end 1 time siden jeg installerede PR1-udgaven .

Her er et par links om emnet:
Bugzilla:
<http://bugzilla.mozilla.org/show_bug.cgi?id=248549> (document.all)
<http://bugzilla.mozilla.org/show_bug.cgi?id=256932> (id/name-support)

Generel liste over ændringer/opdateringer/forbedringer:
<http://www.squarefree.com/burningedge/bigger-picture.html#newin1.0pr1>

Release notes:
<http://www.mozilla.org/products/firefox/releases/0.10.html>

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

 
 
Lasse Reichstein Nie~ (14-09-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 14-09-04 17:36

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.'

Jens Gyldenkærne Cla~ (14-09-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 14-09-04 20:28

Lasse Reichstein Nielsen skrev:

>> 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.

Det er nok bare mig der har fået galt fat i noget.


> 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.

Netop.

Tak for mange gode kommentarer.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste