Ladda CSS till Opera?

HTML & CSS

4 svar · 242 visningar · startad av bigsky

Medlem sedan maj 2002821 inlägg
Trådstart#1

Jag använder följande kod till att ladda in stillmallar beroende på system och browser:

    browserVer = parseFloat(navigator.appVersion); 
if ((navigator.appVersion.indexOf("Mac") != -1)) {
	document.write("<LINK REL=stylesheet HREF=\"/include/mac.css\" TYPE=\"text/css\">");
}
else if ((navigator.appName == "Microsoft Internet Explorer") && (browserVer > 1)) {
	document.write("<LINK REL=stylesheet HREF=\"include/ie.css\" TYPE=\"text/css\">");
}
else if (document.layers) {
	document.write("<LINK REL=stylesheet HREF=\"include/ns.css\" TYPE=\"text/css\">");
}
else if (navigator.appName == "Netscape" && document.getElementById) {
	document.write("<LINK REL=stylesheet HREF=\"include/ns67.css\" TYPE=\"text/css\">");
}

Om man använder Opera för att surfa på sidan ser det bra ut så länge man har ställt in Opera att identifieras som IE eller olika versioner av Mozilla. Men ställer man in Opera att identifieras som just Opera laddas det ingen still mall. Hur ska jag anpassa koden ovan för att det ska fungera?

Medlem sedan juli 2002630 inlägg
#2

/* Alla webbläsare som ej angivits ovan får den här stilmallen*/
else {
document.write("<LINK REL=stylesheet HREF=\"include/whatever.css\" TYPE=\"text/css\">");
}

Medlem sedan maj 2002821 inlägg
#3

Nej, det verkar inte fungera. Ser ut så här nu:

    browserVer = parseFloat(navigator.appVersion); 
if ((navigator.appVersion.indexOf("Mac") != -1)) {
	document.write("<LINK REL=stylesheet HREF=\"include/mac.css\" TYPE=\"text/css\">");
}
else if ((navigator.appName == "Microsoft Internet Explorer") && (browserVer > 1)) {
	document.write("<LINK REL=stylesheet HREF=\"include/ie.css\" TYPE=\"text/css\">");
}
else if (navigator.appName == "Netscape" && document.getElementById) {
	document.write("<LINK REL=stylesheet HREF=\"include/ns.css\" TYPE=\"text/css\">");
}
else {
    document.write("<LINK REL=stylesheet HREF=\"include/opera.css\" TYPE=\"text/css\">"); 
}
Medlem sedan dec. 20025 483 inlägg
#4

Anledningen till det inte fungerar är just att webbläsare såsom Opera kan identifieras som IE, Mozilla, Netscape o.s.v. Den enda gången else-satsen i din kod kommer att köras är då besökaren ställt in sin webbläsare att identifieras som Opera.

Felet med koden är alltså att du laddar stilmall beroende på vad navigator.appName ger för sträng, vilket i Operas fall alltså kan vara i stort sett vad som helst.

Överväg att använda följande istället istället för navigator.appName:

...
navigator.userAgent;
...

För att identifiera Opera kan du göra så här:

...
var opera = ( window.opera && navigator.userAgent.toLowerCase().indexOf( "opera" ) != -1 );
...

:)

Medlem sedan maj 2002821 inlägg
#5

Skulle du kunna visa hur jag ska konvertera koden? För att använda userAgent istället för appName.

262 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)