at(nospam) <"lasse(at(nospam))the87boy.dk"> writes:
> Nu har jeg blot en fejl, og denne er:
>
> Error: uncaught exception: [Exception... "Object cannot be created in
> this context" code: "9" nsresult: "0x80530009
> (NS_ERROR_DOM_NOT_SUPPORTED_ERR)" location:
> "
http://skole.the87boy.dk/Service%20og%20Kommunikation/index.php?id=1
> Line: 53"]
Der er flere bekymrende linjer i dit script.
Selve fejlen kommer fordi du bruger document.write. Denne er ikke
understøttet i XHTML (fordi XML-parseren skal parse hele siden inden
den overlades til XHTML-fortolkeren, som først da kan se hvilke
elementer er scripts og udføre dem, så der er det for sent at ændre
på sidens XHTML-indhold ved at indsætte uparset tekst).
Hvis du vil ændre på indholdet, så skal du bruge DOM-metoder, ikke
document.write.
Et par linjer over står der:
---
var ie4=document.all;
var dom=document.getElementById&&navigator.userAgent.indexOf("Opera")==-1;
---
Browser-sniffing (at forsøge at finde ud af hvilken browser man bruger),
er generelt en dårlig idé ... bl.a. fordi det er så svært at gøre, og
fordi man uværgerligt glemmer nogle browsere. Hvad er værdien af ie4
og dom fx i Safari? Gør det noget hvis de begge er true? Hvis nej, hvorfor
er Opera så undtaget?
Det er bedre at bruge feature-sniffing, hvor man tjekker om præcist den
funktionalitet man skal bruger, er der. Det gøres fint i moveslide hvor
der testes for .filters og .style.MozOpacity.
Man kunne sige at det er det du gør, ved at tjekke om document.all er
der og om document.getElementById er der, men så er navnene på
variablene misledende, og tjekket for Opera er spildt (Opera understøtter
både document.all og document.getElementById, så det virker alligevel).
Så er der linjen:
---
crossobj=tempobj=ie4? eval("document.all."+curcanvas) : document.getElementById(curcanvas);
---
Her er "eval" helt unødvendig:
crossobj = tempobj = (dom? document.all[currcanvas] :
document.getElementById(curcanvas));
Her burde der nok tilføjes en linje for netscape 4, som du jo forsøger
at understøtte med layers. Brug fx:
function getElement(id) {
if (document.getElementById) {
return document.getElementById(id);
} else if (document.all) {
return document.all[id];
} else if (document.layers) {
return document.layers[id]; // hvis det er et layer
} else {
return null; // panic
}
}
Man kan udvide den til at tjekke alle collections (document.images,
document.forms (og deres elements)) i stedet for kun document.layers,
så man har en chance for at finde et element der har en id i Netscape
4, også hvis det ikke er et layer.
Hvis du vælger forskellige sider afhængigt af om browseren forstår
XHTML, så skal du enten også bruge forskellige scripts, eller skrive
det meget forsigtigt så det understøtter både DOM og document.write.
/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.'