Insérer
du contenu suivant le navigateur avec SSI
Confirmé
Plaçons-nous dans le cas de figure suivant: vous avez élaboré
une page d'accueil remplie d'effets DHTML, mais vous vous apercevez
que l'affichage complexe des différents calques et styles
que vous utilisez se révèle complètement différent
sur IE5, Netscape 4.7, Netscape 6.0 ou encore Opera 5.0. Que faire?
Passer de longs moments à "gommer" les différences
en réalisant un code DHTML compatible avec le plus grand
nombre de navigateurs, au risque de sacrifier certains effets dont
vous êtes si fier (cette approche est encore la meilleure),
ou, au contraire, contourner le problème en réalisant
plusieurs pages pour chaque navigateur, et réaliser un petit
Javascript de redirection? La deuxième méthode peut
être fastidieuse si les différences entre les pages
sont minimes. Dans ce cas, les trois quarts du code de chaque page
sera à l'ensemble d'entre elles. Ne serait-il pas plus simple
de ne réaliser qu'une page, et de décider dynamiquement
d'inclure telle portion de code, ou telle autre, suivant le navigateur?
C'est exactement ce que nous permet de faire les SSI,
pourvu qu'ils soient supportés par le serveur d'hébergement.
A noter que le jeu d'instructions SSI utilisé n'est implémenté
que par la versions 1.2 - et supérieures - d'Apache. On parle
d'XSSI - eXtended SSI - pour les désigner.
Boucle conditionnelle en commandes SSI
Notre test SSI présentera la structure suivante:
|
<!--#if expr="expression
à évaluer" -->
<!--#include virtual="fichier_pour_IE5"
-->
<!--#elif expr="expression à évaluer"
-->
<!--#include virtual="fichier_pour_NN6"
-->
<!--#elif expr="expression à évaluer"
-->
<!--#include virtual="fichier_pour_NN4"
-->
etc...
<!--#else>
<!--#include virtual="fichier_pour_Opera"
-->
<!-- #endif-->
|
Chaque fichier contiendra, non une page entière, mais la
portion de code HTML (ou DHTML) qui pose problème lors de
l'affichage sur différents navigateurs.
L'expression qui sert de condition de test fera intervenir, quant
à elle, la variable d'environnement CGI HTTP_USER_AGENT,
qui contient le nom du navigateur. Par exemple:
${HTTP_USER_AGENT} = /MSIE 5/
Une opération de recherche de la chaîne MSIE 5 dans
la variable ${HTTP_USER_AGENT} (voir l'article sur les expressions
régulières) permettra de caractériser Internet
Explorer 5. Notre programme ressemblera finalement à celui-ci:
|
<!--#if expr="${HTTP_USER_AGENT}
= /MSIE 5/" -->
<!--#include virtual="fichier_pour_IE5"
-->
<!--#elif expr="${HTTP_USER_AGENT} = /Mozilla\/6/"
-->
<!--#include virtual="fichier_pour_NN6"
-->
<!--#elif expr="${HTTP_USER_AGENT} = /Mozilla\/4/"
-->
<!--#include virtual="fichier_pour_NN4"
-->
etc...
<!--#else>
<!--#include virtual="fichier_pour_Opera"
-->
<!-- #endif-->
|
Ainsi, très simplement, une alternative à la redirection
de page (Javascript ou CGI/Perl) est proposée. Des modifications
sur la page d'accueil qui ne concernent pas les parties posant problème
de compatibilité entre navigateurs n'ont ainsi pas besoin
d'être effectuées sur toutes les pages spécifiques
à tel ou tel navigateur. La programmation modulaire SSI nous
fait gagner un temps précieux.
[Jérôme
Morlon 16
mars 2001 , JDNet]
|