Compatibilité entre les différents navigateur, browseur, butineur, Internet, les derniers nés : chrome, ie8, ... à suivre.
Comment rendre incompatibles les développeurs Web ?
C'est très simple, installez IE8 et votre site développé en ASP.NET C# est immédiatement rendu incompatible !
Le composant standard ASP:MENU ne s'affiche plus. C'est pourtant une pièce maîtresse de tout site qui se respecte. Ce composant standard ne s'affichait pas dans Chrome jusqu'à ce que je trouve un bout de code de merd... à insérer dans toutes mes pages :
if ( Request.UserAgent.IndexOf( "AppleWebKit" ) > 0 )
{
Request.Browser.Adapters.Clear();
}
S'il suffit de nettoyer tous les Adapteurs de Navigateur pour être compatible à priori c'est pas trop difficile. Bon, mon étude de la compatibilité IE8, Chrome , FireFox, Netscape, démarre très fort.
Au grand dieu ! Il faut être compatible ! Si les développeurs web se mettent à développer des applications web, c'est pour des tas de bonnes raisons et l'une d'entre elle c'était surement la compatibilité ! En ne développant qu'une fois et en installant l'application l'application derrière un serveur web, cela devait y être, votre application était accessible au monde entier (aux Internautes).
C'est un peu un voeux pieux et les navigateurs : Netscape, IE, Chrome, FireFox, WebKit etc ... sont toujours en guéguerre et il faudra toujours prendre en considération la compatibilité des différents navigateurs entre eux pour écrire une simple page de code HTML. En tout cas, dès que l'on écrit des pages web un peu compliquées, il faut considérer les différents navigateur alors que l'on ne devrait considérer que des normes ...
Maintenant, avec IE8, lorsque je veux copier-coller quelque chose dans mon éditeur HMTL de page web, je dois cliquer deux fois sur "Autoriser l'accès" ! Mais quelle grosse daube, il doit y avoir une putain de case à cocher dans les options d'Internet (92 options réparties en 17 rubriques), il faudra que je prenne le temps de la chercher en attendant c'est vraiment pénible !
Compatibilité avec IE8
Les CSS
J'ai démarré en me disant que je pouvais peut-être investir un peu plus de temps sur la compréhension de ces histoires de compatibilité entre navigateurs parce que je n'aimerais pas mourir idiot et qu'à mon âge, il faut que je me dépeche.
J'ai perdu un temps fou avec CSSFriendly. Ha c'est "friendly", friendly c'est bien le bon mot. Il y a un gentil développeur qui a mis au point un ControlAdapter pour réécrire le code HTML généré par le control ASP:MENU. C'est fort ! Indéniable c'est fort ! Mais à quoi cela peut bien servir ?! Comme très bon exemple en tous cas. Et bien tout simplement au lieu de se construire avec des TABLE votre menu se construit avec des UL et des LI. C'est fort, on est content, des pages et des pages de code pour ça, cela parait un peu dérisoire surtout quand il faut les déboguer.
Cela fonctionne pour un tout petit menu de deux articles ! Je dirais même mieux pour les experts ; cela fonctionne avec un menu dont les articles ont la même largeur, la même "width".
Essayez d'en mettre un troisième, vous y arriverez en manipulant la CSS du MENU mais c'est tout. Rien à voir avec le MENU construit dynamiquement qui la pièce maîtresse de ce site. Alors ce gentil développeur, il a écris des pages et des pages de code, en C# heureusement, pour un truc qui ne marche pas. D'abord, c'est normal avec des UL LI vous ne pouvez pas faire ce que vous faites avec des TABLE ou bien encore des DIV! C'est d'autant plus crétin que si vous avez besoin d'un menu, à ce stade vous avez carrément intérêt à l'écrire directement en HTML pendant que vous y êtes !
Et sinon, pour les UL LI, on penserait à en faire un truc plutôt vertical, les tables pourraient faire un truc vertical ou horizontal, un menu c'est vertical ou horizontal à moins que vertical ce ne soit un treeview. Enfin que l'on se mette d'accord une fois pour toute. Il faut un truc vertical, un truc horizontal et un truc qui ne fasse pas trop mal les deux.
Les TABLE et les DIV
On vous dit qu'il ne faudrait plus utiliser TABLE mais plutôt faire des DIV et que c'est une question de mode, niant niant niant. Après des pages de lecture sans intérêt, vous apprenez qu'avec des DIV, il vous sera impossible de présenter votre site sur forme de trois colonnes : gauche, centre, droite, correctement. C'est le cas pour ce site dynamique. C'est vrai, j'ai essayé, c'est impossible, les trois colonnes n'auront jamais la même taille jusqu'en bas. Je suis donc resté avec mes TABLE et je dis merde au puristes du CSS.
Après, il y a un gentil développeur, à la page suivante :
Internet Explorer 8 : compatibilité
Qui vous explique tranquillement qu'il vous suffit d'insérer une balise META dans votre code pour le rendre compatible. Ha bas alors, si on fait tout ce bordel pour ça, ce n'est pas bien grave. S'il ne s'agit que d'intégrer une balise META de plus, avec un code pour être compatible, pourquoi pas, il devrait d'ailleurs y a avoir une section entière réservée aux codes méta pour que mon site soit compatible.
Notez au passage qu'il n'a pas dénié fermer sa balise META et devrait donc être condamné à être pendu par le tribunal du W3C.
Je vous rassure cela ne fonctionne pas ! Votre objet standard ASP:MENU est toujours mal affiché sans la compatibilité.
Mai alors ce gentil crétin plus haut, il vous dit que vous pourriez également rendre compatible votre site en ajoutant quelques lignes dans votre Web.config. Bon bas puisque j'avais rien à faire, je copie colle le code dans mon Web.config et BOUM ! Erreur Web.config. Ha bas c'est sûr à force de ne pas fermer ses balises, le crétin du haut, il vous a donné un code pourri à croire qu'il ne l'a même pas testé lui même. Même rectifié ASP:MENU ne s'affiche toujours pas sans la compatibilité IE8.
Unique test de compatibilité
Dans n'importe quels navigateurs que vous soyez, prenez la poigné en bas à droite et refermez tranquillement la fenêtre. Si la page web se referme avec la poignée et que vous pouvez continuer à naviguer dans le site vous avez alors une garantie d'accessibilité.
J'avoue mais vous l'aurez compris au ton de cet article, d'ailleurs ce n'est pas dans mes habitudes d'être grossier, mais là j'en ai un peu marre du Web. On vous parle de Standards du Web on vous bassine avec des polémiques DIV ou TABLE sans intérêt car de toutes les façons personne n'est capable de tester tous les cas de figure et de prédir le comportement d'un objet WEB dans tous les navigateurs existants et ceux à venir, je ne vous parle même pas de ASP:MENU ni de SilverLight dans Chrome PTDR !
Moi, pauvre petit éditeur, j'ai la très désagréable impression que les gros, tous autant qu'ils sont, s'arrogent des prérogatives, des passes droit, pour nous embourber et nous faire perdre notre temps et donc notre argent. C'est trop facile pour eux ! Alors ne me parlez plus de standard, il n'y a jamais eu de standard, il n'y a que des trucs qui marchent et d'autres qui ne fonctionnent pas. Le problème c'est qui si vous êtes aujourd'hui capable, de faire un truc qui marche, demain un gros peut vous le casser.
Mabyre
31 mai 2009
Autres lectures sur le sujet
En juillet 2009 : création de la page microsoft :
http://msdn.microsoft.com/fr-fr/ie/cc963662.aspx
Pour le développeur il possible d’ajouter à la page HTML un tag pour que Internet Explorer 8 utilise directement le moteur de rendu de Internet Explorer 7 afin que l’internaute n’ai pas à changer de mode de rendu manuellement.
http://weblogs.asp.net/.../2009/03/23/asp-menu-fix-for-ie8-problem-available.aspx
Là, il y a un débile crétin qui vous indique un patch qui n'existe pas, ou plus ! Si vous cherchez un peu, vous allez pouvoir télécharger un .msu ?! Pourquoi pas, allé on le renomme en .msi pour voir mais cela ne fonctionne pas !
http://www.developpez.net/forums/.../
Là, il y a un tas d'autres gas qui essayent de trouver la solution mais sans succès.
http://blogs.iis.net/sakyad/.../asp-net-menu-getting-padded-with-white-space-on-ie8.aspx
Là, il y a un gas qui semble avoir de solides connaissances techniques mais son truc ne marche par pour tout le monde
http://forums.asp.net/p/.../2586447.aspx
En anglais, une sorte de compilation de problèmes rencontrés, des trucs qui ne marchent pas !
http://nyams.planbweb.com/../compatibilite-et-ie8-ou-comment-refiler-une-patate-chaude/
Internet Explorer 8 n’est pas encore sorti que les infos qui entourent sa conception sèment la zizanie dans le monde des développeurs. Essayons de débroussailler les différentes informations afin de se faire une opinion, la plus objective possible, sur ce qui se passe chez RedMond.
http://www.giantisland.com/Resources/LitePacificHackforSafariAndIE7.aspx
Vous pour constater que la compatibilité des pages web dans les différents navigateurs : ce n'est pas gagné. Voici un site sur lequel les CSS sont bien complexe pour tenter d'avoir le même rendu sur différents navigateurs.
http://blogs.msdn.com/giorgio/archive/2009/02/01/asp-net-menu-and-ie8...
Un lien indiqué par Quân (cf. commentaires) merci à lui pour sa contribution. Il a raison, la solution viendra certainement des sites en anglais mais pas de msdn cela m'étonnerait. Après l'avoir parcouru, rapidement je l'avoue, je ne vois rien de plus que ce qui à déjà été dit malheureusement.
http://standblog.org/blog/post/2008/01/25/Compatibilite-et-IE8-:-le-point
Voici un article écris en Janvier 2008 par un Internaute qui s'inquiétait de voir émerger plusieurs standards du Web.
http://www.pcinpact.com/actu/news/41391-microsoft-IE8-compatibilite-rendu-W3C.htm
Ce qui s'écrivait déjà sur le navigateur IE6 et qui parlait du futur IE8 avec exactitude
Recherche google
cliquer pour rechercher :
asp:net menu compatibilité IE8
"asp:net menu" compatibilité IE8
css chrome hack
Du nouveau
1 juillet 2009 : Merci aux internautes de passage pour les commentaires , et je les remercie chaudement, il ne semble qu'aucune autre solution n'est encore trouvée côté ASP.NET.
Malgré tout, nous avons remarqué qu'avec sa nouvelle interface AdWords, Google se met enfin au menus déroulants. Je ne sais pas si vous aviez remarqué, mais Google avait une répugnance toute particulière à utiliser des menus déroulants, ils étaient souvent réprésentés par des listes déroulantes Ajax. Avec AdWords et ses nombreuses fonctionnalités Google ne pouvait plus se passer des menus déroulants static avec toute l'info sur le client. Il suffit donc maintenant que DotNet se mette à jour pour fournir un objet ASP:MENU qui ait enfin un comportement compatible avec IE8.
Touche de compatibilité IE8 du nouveau
http://www.01net.com/contenu/2562/ta_fiches/comment-resoudre-les-problemes-de-compatibilite-dinternet-explorer-8-491-1
Probablement, pour l'instant, le meilleur article écris sur le sujet, c'est clair pour rendre votre site ASP.NET comptatible avec IE8 les internautes visiteurs de votre site devrons cliquez sur le bouton "Affichage de comptatibilité IE8", qu'en pensez-vous ?
Compatibilité IE8, une solution
Ajouter au web.config la balise suivante :

Une seule chose est sûre pour l'instant, il faut avoir la balise ci-dessus dans la page web, si on veut être "compatible IE8" sinon la touche "Affichage de compatibilité" s'affiche quoi qu'il arrive !
Ensuite, pour rendre imcompatible votre projet web il suffit d'inclure une balise "link" dans la balise "head". La seule différence entre mon projet compatible et mon projet incompatible c'est la présence d'une balise :
link href="App_Themes/MonTheme/Button.css" type="text/css" rel="stylesheet"
dans la balise "head". J'aurais donc furieusement tendance à penser très fort que ce qui est incompatible avec IE8 c'est l'utilisation des feuilles de styles mais dites moi pas que c'est pas vrai, ce n'est pas possible, rassurez moi !
Concernant le commentaire lié au bouton "Affichage de compatibilité" : Cela n'a rien à voir avec un site web conçu pour des navigateurs plus anciens, mon site web est conçu avec les dernières technologies Microsoft ASP.NET Visual Studio 8 et le framework 3.5 en 2009, rendez-vous compte !
Compatibilité IE8, la solution
La solution au problème de comptatibilité IE8 nous est donnée par ce site en anglais :
http://faseidl.com/public/item/228970
Il faut lire très attentivement, et se rendre compte qu'il préconise de placer la balise méta le plus tôt possible dans la page. Merci, viva el genius ! Et je terminerai comme lui, je vais cesser de m'arracher les cheveux en plaçant cette balise, le plus tôt possible, dans mes balises méta !
Si comme moi, vous vous êtes fait avoir, en plaçant, comme j'en ai l'habitude, les métas dans le code C# de la PageBase.cs et que du coup cette balise méta apparait dans les pages du navigateur en dernière position, juste avant le fermeture de la balise "head", ce qui donne un comportement particulier à la page, et que pour vous, la touche de daube d'ie8 "affichage de compatibilité" est tourjours là pour vous rappeler que votre site web n'est pas compatible et que vous devez expliquer aux visiteurs que pour naviguer sur votre site web il vous faut cliquer sur cette touche de la honte alors si comme moi vous êtes toujours là ...
Si vous êtes arrivé jusqu'ici, parce que vous avez fait cette erreur et que votre problème est maintenant résolu, alors vous aurez comme moi, évité l'infarctus !
Mabyre
02 février 2010
Conclusion : Ne nous réjouissons pas trop vite car si IE de Microsoft se permet de faire cela, signifiant que toutes les anciennes pages qui n'intègrent pas cette balise méta, deviennent des pages obselètes. Il se pourrait que d'autres s'y mettent également ... à suivre ...
Accueil