Hej Morten
Morten Abildgaard wrote:
> Simon Mikkelsen skrev i dk.edb.internet.webdesign.clientside:
>>Lige et godt tip:
> [klip]
> Bravo, det er rigtig godt gået det der.
Enig !
Men angivne script ser jeg problemer med:
> function brwcheck(){
> this.ver=navigator.appVersion;
> this.agent=navigator.userAgent;
> this.dom=document.getElementById?1:0;
> this.opera5=this.agent.indexOf("Opera 5")>-1;
> this.ie5=(this.ver.indexOf("MSIE 5")>-1 &&this.dom&&!this.opera5)?1:0;
> this.ie6=(this.ver.indexOf("MSIE 6")>-1 &&this.dom&&!this.opera5)?1:0;
> this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
> this.ie=this.ie4||this.ie5||this.ie6;
> this.mac=this.agent.indexOf("Mac")>-1;
> this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
> this.ns4=(document.layers && !this.dom)?1:0;
> this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera5);
> return this;
> } bw=new brwcheck();
[klip noget kode]
Dette script har for mig at se den svaghed at det kræver at man kender
alle browsere som skal understøttes. Det bygger primært på browser-check
fremfor feature-check, og det er efter min mening en fejl. Ovenstående
funktion vil give problemer med Konqueror 2.x som både understøtter W3C
DOM (document.getElementById) og IE4-DOM (document.all). I hvert fald
når man bruger det fremkomne objekt bw som det (lidt uoverskueligt
iøvrigt) angives:
> // og så finder vi elementet
> el=(bw.ns4)?document.sub:(bw.ie4 || bw.ie5)?document.all[sub]:(bw.ns6 ||
> bw.ie55 || bw.ie6)?document.getElementById(sub):0;
Bruger man det sådan, vil jeg i hvert fald ændre den sidste sidste "if"
til et mere generelt W3C DOM check så det også virker i f.eks. Konqueror
2.x:
el=(bw.ns4)?document.sub:(bw.ie4 ||
bw.ie5)?document.all[sub]:(bw.dom)?document.getElementById(sub):0;
Er der iøvrigt en specielt grund til at ovenstående bruger
document.all[] i IE5 når document.getElementById() også er understøttet
i denne browser ? Jeg vil hellere bruge den standardiserede W3C DOM
metode når den understøttes, fremfor Microsofts egen document.all[].
Personligt ville jeg selv tage udgangspunkt i at tjekke for
understøttelse af document.getElementById, document.all og
document.layers i angivne prioriterede rækkefølge, og kun tjekke for
specifikke browsere når der er ting jeg ved ikke virker i bestemte
browsere, og kræver at der tages særlige hensyn i disse. Så er jeg lidt
mere fremtidssikret, og behøver ikke kende alle browsere som kan tænkes
at virke.
Mvh. Stig
stig@rockland.dk
PS. Flere links om emnet på
http://www.rockland.dk/stig/upghtml.html