- · Niveau : INTERMÉDIAIRE
- · Compatibilité : Tous les navigateurs
Ce petit Javascript permet de tester le navigateur et le système d’exploitation pour indiquer au navigateur la feuille de styles à utiliser. Le teste se fait sur la plupart des versions de navigateurs et sur Linux, Macintosh et Windows. Vous pouvez le modifier pour ne pas tester la version du navigateur ou encore linux. Mon exemple, quelque peu exclusif, est seulement pour montrer les différences majeures. Noter qu’il en existe des dizaines d’autres.
Pourquoi ?
Malgré la grande compatibilité du CSS, il y a plusieurs différences selon le navigateur, la version du navigateur et le système d’exploitation. Notamment sur la grandeur des caractères, l"offset" ou encore les centaines de petits "bogues" spécifiques à chaque navigateur. Netscape ne réagit pas comme Internet Explorer, Netscape 3 ne réagit pas comme Netscape 6 ou Netscape 4 sous Windows ne réagit pas comme Netrscape 4 sous Macintosh !
Enfin, il est possible de bien tester une feuille de styles et de n’utiliser que des fonctions compatibles, ou encore n’avoir que quelques exceptions. Une feuille de styles pour chaque système d’exploitation par exemple. Dans ce dernier cas, il suffit d’enlever les tests que vous ne désirez pas dans le code suivant.
<html>
<head>
<title>CSS dynamique</title>
<script type="text/javascript" language="javascript">
<!--
// *************************************
// Teste le navigateur et la plate-forme
// Affiche le code qui appelle la bonne
// feuille de styles (CSS)
// http://www.trucsweb.com
// *************************************
// MODIFIER ICI LE CHEMIN D’ACCÈS (PATH)
// de vos documents CSS et le nom des
// différents fichiers.
// *************************************
var nPath = "http://www.serveur.com/css/"
aFichiersCss = new fait_Array(17);
// Css par défaut, ne rien mettre si aucun
// Ce sera le style si rien n’est détecté.
aFichiersCss[0] = "style.css";
// Window Netscape
aFichiersCss[1] = "winnav6.css";
aFichiersCss[2] = "winnav4.css";
aFichiersCss[3] = "winnav3.css";
// Window Internet Explorer
aFichiersCss[4] = "winie5.css";
aFichiersCss[5] = "winie4.css";
aFichiersCss[6] = "winie3.css";
// Window Opera
aFichiersCss[7] = "winopera.css";
// Macintosh Netscape
aFichiersCss[8] = "macnav6.css";
aFichiersCss[9] = "macnav4.css";
aFichiersCss[10] = "macnav3.css";
// Macintosh Internet Explorer
aFichiersCss[11] = "macie5.css";
aFichiersCss[12] = "macie4.css";
aFichiersCss[13] = "macie3.css";
// Macintosh Opera
aFichiersCss[14] = "macopera.css";
// Linux Netscape
aFichiersCss[15] = "lixnav6.css";
aFichiersCss[16] = "lixnav4.css";
aFichiersCss[17] = "lixnav3.css";
// *************************************
function fait_Array(n) {
this.length = n;
return this;
}
var nCss = 0;
var user_agent=navigator.userAgent.toLowerCase();
var nav_version = navigator.appVersion.toLowerCase();
var nav_minor = parseFloat(nav_version);
var nav_major = parseInt(nav_minor);
var iePos = nav_version.indexOf(’msie’);
if (iePos !=-1) {
nav_minor = parseFloat(nav_version.substring(iePos+5,nav_version.indexOf(’;’,iePos)))
nav_major = parseInt(nav_minor);
}
var nav6Pos = user_agent.indexOf(’netscape6’);
if (nav6Pos !=-1) {
nav_minor = parseFloat(user_agent.substring(nav6Pos+10))
nav_major = parseInt(nav_minor)
}
var nav_nav = ((user_agent.indexOf(’mozilla’)!=-1) && (user_agent.indexOf(’spoofer’)==-1)
&& (user_agent.indexOf(’compatible’) == -1) && (user_agent.indexOf(’opera’)==-1)
&& (user_agent.indexOf(’webtv’)==-1));
var nav_nav3 = (nav_nav && (nav_major == 3));
var nav_nav4up = (nav_nav && (nav_major >= 4));
var nav_nav6up = (nav_nav && nav_minor >= 6);
var nav_ie = (iePos!=-1);
var nav_ie3 = (nav_ie && (nav_major < 4));
var nav_ie4up = (nav_ie && nav_minor >= 4);
var nav_ie5up = (nav_ie && nav_minor >= 5);
var nav_opera = (user_agent.indexOf("opera") != -1);
var nav_win = ( (user_agent.indexOf("win")!=-1) || (user_agent.indexOf("16bit")!=-1) );
var nav_mac = (user_agent.indexOf("mac")!=-1);
var nav_linux = (user_agent.indexOf("inux")!=-1);
if (nav_win){
if (nav_nav6up) nCss = 1;
else if (nav_nav4up) nCss = 2;
else if (nav_nav3) nCss = 3;
else if (nav_ie5up) nCss = 4;
else if (nav_ie4up) nCss = 5;
else if (nav_ie3) nCss = 6;
else if (nav_opera) nCss = 7;
} else if (nav_mac) {
if (nav_nav6up) nCss = 8;
else if (nav_nav4up) nCss = 9;
else if (nav_nav3) nCss = 10;
else if (nav_ie5up) nCss = 11;
else if (nav_ie4up) nCss = 12;
else if (nav_ie3) nCss = 13;
else if (nav_opera) nCss = 14;
} else if (nav_linux) {
if (nav_nav6up) nCss = 15;
else if (nav_nav4up) nCss = 16;
else if (nav_nav3) nCss = 17;
}
if (aFichiersCss[nCss].length > 1) {
document.write("<link rel=\"stylesheet\" href=\""+nPath+aFichiersCss[nCss]+"\" type=\"text/css\" />");
}
// -->
</script>
</head>
Exemple plus simple
<script type="text/javascript" language="javascript">
<!--
// *************************************
// Teste le navigateur et la plate-forme
// Affiche le code qui appelle la bonne
// feuille de styles (CSS)
// http://www.trucsweb.com
// *************************************
// MODIFIER ICI LE CHEMIN D’ACCÈS (PATH)
// de vos documents CSS et le nom des
// différents fichiers.
// *************************************
var nPath = "http://www.serveur.com/css/"
aFichiersCss = new fait_Array(5);
// Css par défaut, ne rien mettre si aucun
// Ce sera le style si rien n’est détecté.
aFichiersCss[0] = "style.css";
// Window Netscape
aFichiersCss[1] = "winnav.css";
// Window Internet Explorer et Opera
aFichiersCss[2] = "winie.css";
// Macintosh Netscape
aFichiersCss[3] = "macnav.css";
// Macintosh Internet Explorer et Opera
aFichiersCss[4] = "macie.css";
// Linux
aFichiersCss[5] = "linux.css";
// *************************************
function fait_Array(n) {
this.length = n;
return this;
}
var nCss = 0;
var user_agent=navigator.userAgent.toLowerCase();
var nav_version = navigator.appVersion.toLowerCase();
var nav_nav = ((user_agent.indexOf(’mozilla’)!=-1) && (user_agent.indexOf(’spoofer’)==-1)
&& (user_agent.indexOf(’compatible’) == -1) && (user_agent.indexOf(’opera’)==-1)
&& (user_agent.indexOf(’webtv’)==-1));
var nav_ie = (nav_version.indexOf(’msie’)!=-1);
var nav_opera = (user_agent.indexOf("opera") != -1);
var nav_win = ( (user_agent.indexOf("win")!=-1) || (user_agent.indexOf("16bit")!=-1) );
var nav_mac = (user_agent.indexOf("mac")!=-1);
var nav_linux = (user_agent.indexOf("inux")!=-1);
if (nav_win){
if (nav_nav) nCss = 1;
else if (nav_ie||nav_opera) nCss = 2;
} else if (nav_mac) {
if (nav_nav) nCss = 3;
else if (nav_ie||nav_opera) nCss = 4;
} else if (nav_linux) nCss = 5;
if (aFichiersCss[nCss].length > 1) {
document.write("<link rel=\"stylesheet\" href=\""+nPath+aFichiersCss[nCss]+"\" type=\"text/css\" />");
}
// -->
</script>
Exemple Netscape ou Internet Explorer
<script type="text/javascript" language="javascript">
<!--
// *************************************
// Teste le navigateur
// Affiche le code qui appelle la bonne
// feuille de styles (CSS)
// http://www.trucsweb.com
// *************************************
// MODIFIER ICI LES CHEMIN D’ACCÈS (PATH)
// de vos documents CSS.
// *************************************
if ((navigator.appName == "Netscape") && ((parseInt(navigator.appVersion) == 4) || (parseInt(navigator.appVersion) == 5))) {
document.write("<link rel=’stylesheet’ href=’repertoire/styleNS.css’ type=’text/css’>");
} else {
document.write("<link rel=’stylesheet’ href=’repertoire/styleIE.css’ type=’text/css’>");
}
// -->
</script>