Attention : la lecture de ce billet est probablement plus aisée sur sa page originale.

Je ne sais pas pourquoi, mais j'ai l'impression qu'Explorer Internet selon Microsoft (traduction littérale de Microsoft Internet Explorer, abrégé MSIE dans ce blog), c'est exactement l'inverse de ce qu'ils ont toujours prôner à l'industrie logicielle : La comptabilité garantie de vos vieux softs ; ici, de vos vieux sites.

Soyons clairs. Oui, MSIE est une bouse immonde, mais on parle de tout ce qui fut MSIE6 et versions antérieures.
MSIE7 était un effort pour relancer un développement abandonné depuis 6 ans, une éternité en informatique. MSIE8 actuellement en béta-version promet enfin d'arriver à la hauteur de là où étaient ses concurrents il y a 4 ans. Et la concurrence est saine, même quand on parle de logiciels gratuits (ou supposés gratuits, MSIE est en fait vendu avec MS-Windows). Elle oblige à respecter plus vite que les autres les normes édictées par les organismes internationaux (W3 pour le HTML et le CSS, ECMA pour le Javascript, etc...), elle oblige à réparer au plus vite les failles de sécurité, elle incite à produire un code de plus en plus efficace (il n'y a qu'à voir la course récente sur l'interprétation Javascript), voire à faire des propositions originales sur les interfaces et les services (Webslices et les microformats pour MSIE8).
Je ne souhaite pas que Firefox ou Safari soient définitivement les meilleurs. Opera mérite une meilleure place, et que l'ancienne position monopolistique de MSIE ne soit plus honteusement usurpée.

Sauf que la IE-Team (le nom de la tribu de devs MSIE chez Microsoft Campus) est arrivée à un paradoxe improbable : À chaque nouvelle version, vous êtes condamnés à reprendre vos vieux sites webs et à en faire des modifications pour que celui-ci marche toujours comme avant dans chaque nouvelle version de leurs navigateurs.

Et à chaque version, la proportions de balises à l'usage exclusif de la rétro-compatibilité de MSIE croit dans la section <head></> de votre HTML.

Commentaires conditionnels

Historiquement, la première “astuce” pour maintenir une compatibilité de rendu entre différentes versions de MSIE. Peut-être l'apport le plus frustrant de Microsoft au HTML.
L'idée est d'isoler du code HTML à l'intérieur d'un commentaire, qui ne sera interprété que selon le programme (MSIE ou Microsoft Office) ou une version ciblée de ce programme.

Ce système a été introduit dans MSIE5, basé sur un dispositif similaire en JScript dans MSIE4.
Au fur et à mesure que l'implémentation des CSS dans MSIE devenait de plus en plus propre, ce même navigateur modifiant parfois de manière radicale son interprétation du code HTML/CSS par rapport à la version précédente. Il fallait ajouter de nouvelles règles CSS (voire des ActiveX, du VBScript ou du JScript, puisque MSIE8 nous promet aussi des évolutions de ce côté-là) pour corriger ces modifications. Exemple pour un code qui ne sera interprété que par MSIE6 :

<!--[if IE 6]>
    <link rel="stylesheet" type="text/css" href="ie6.css" />
<![endif]-->

Il est tout à fait possible d'obtenir un rendu presque uniforme entre MSIE6 et 7 par rapport aux navigateurs modernes en une seule CSS. Mon site en est un exemple, celui du Supplément Week-End aussi. Mais même les meilleurs webdesigners n'ont parfois pas d'autres choix que de passer par cet artifice.

Là où cela devient frustrant, c'est que Microsoft a proposé une manière “compatible” pour que les autres navigateurs interprètent une portion balisée de code HTML.

<![if !IE]>
    <script type="text/javascript" src="codeserieux.js"></script>
<![endif]>
  1. Ça ne marche pas
  2. Ça rend votre code HTML non conforme dans n'importe quel validateur
  3. Ça marche encore moins quand on transforme la balise incorrecte en balise de commentaire
Dommage. J'aurais même aimé un test en fonction des versions, par exemple pour proposer les colonnes CSS3 dans Safari 4 (la version 3 le supporte incomplètement, j'ai dû le leur désactiver).

Doctype switching, presque la bonne idée

Quand le respect (minimal) des normes commençait à se faire sentir chez Microsoft, cette entreprise buttait face à son propre héritage : Comment arriver à continuer à émuler les erreurs de MSIE5 et inférieurs qui sont abondamment exploités par les outils d'entreprises vendus (très cher) par Microsoft, tout en respectant les standards afin d'évoluer dans le bon sens ?

Faut dire qu'en interne, à ce moment-là, les noms d'oiseaux volaient entre la IE Team et l'équipe des outils ASP. Ça, je l'ai découvert dans certains forums développeurs internes à Microsoft quand je faisais mes recherches sur la balise <button></>.

Afin de distinguer le code HTML pourri ancien du neuf, un consensus fut trouvé en interne avec le <!DOCTYPE >. Cette balise est en fait un portage du XHTML vers le HTML. Dans tout document XML, on doit faire référence à un dictionnaire, une grammaire des balises, des attributs, des entitées. Cela est fait dans un document dit DTD.

Donc l'inclusion d'une DTD validant le (X)HTML (et bizarrement, l'IRI qui y est déclarée n'envoie pas sur une DTD. Celle-ci n'est jamais lue par le navigateur !) entraîne le passage du moteur de rendu quirk à strict. Exemple avec une déclaration XHTML 1.0 dans la saveur transitionnal :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

La même astuce est d'ailleurs utilisée par Gecko, le moteur de rendu de Firefox.
Le problème, c'est l'implémentation imprécise de ce dispositif dans MSIE6. Si le <!DOCTYPE > n'est pas au tout tout tout début du document HTML (et le moindre espace, le moindre retour chariot, voire le moindre Unicode BOM le fera péter), le switch ne se fait pas et MSIE6 reste quirk.

Actuellement, une norme intéressante est en cours de rédaction : le HTML5 (ainsi que sa version XML, le XHTML5), poussé par le WHAT-WG et finalement adoptée par le W3C. C'est une réponse au XHTML2 poussé par ces derniers qui devenait trop compliqué.
L'idée du HTML5 est qu'on peut l'émuler dès maintenant, soit en s'appuyant sur les “tolérances” des navigateurs, soit en ajoutant des comportements par manipulations JS/DOM. Et qu'on peut aussi s'attaquer à alléger le plus possible la malheureuse balise <head></>. En analysant proprement comment MSIE et Gecko parsent ce prologue, il est apparu que la définition la plus simple possible permettait de switcher dans le bon moteur de rendu.

<!DOCTYPE html>
\o\ \o/ /o/ Houra ! HTML5 a sa signature (mais c'est un autre sujet).

XML ma non troppo

MSIE6 est incapable de reconnaître un document XHTML proprement formé. Microsoft a été le chantre, l'apôtre, l'ayatollah, l'intégriste du document XML. Faut avouer à leur décharge que c'est un format fouchtrement pratique. Si cette norme d'organisation de documentation avait été proprement appliqué par Microsoft dans le HTML (ce que l'on appelle le XHTML, et qui rend moins bordélique le HTML tout en restant lisible par n'importe quel navigateur), MSIE6+ aurait dû accepter sans sourciller le prologue XML :

<?xml version="1.0" encoding="UTF-8"?>
Et évidemment… ça ne marche pas. Plus exactement, sa présence crée un conflit empêchant le doctype switching, ce qui est un comble vu que le Doctype est un portage d'une balise XML dans les normes HTML ou quand nous voulons produire du XHTML pur tube. Car comme je viens de l'expliquer, le passage en mode de rendu strict ne fonctionne que si le tout premier caractère est l'ouverture de la balise déclarant le doctype. D'où l'impossibilité de mettre un prologue XML. Contrairement à ce qu'affirme quirksmode, ce n'est pas une possibilité laissée par Microsoft pour faire du quirks en XHTML, c'est un bug stupide, avoué par la suite, et pardonné par sa correction dans MSIE7.

Gros problème car la plupart des validateurs XHTML exigeaient à la fois le prologue, mais aussi le type-mime associé.
Seule solution, faire une discrimination en fonction du user-agent déclaré. Rien de plus idiot, quoi. Résultat, tout le monde se passe du type-mime et du prologue XML, et on a gentiment demandé aux validateurs de faire comme si le prologue XML était toujours là. Une fois de plus, Microsoft a dicté son comportement lacunaire.

Il y eu les Smart Tags

L'idée que proposait Microsoft était de rajouter à la volée sur certains mots-clés de vos pages des popup contextuelles. En général basées sur la reconnaissance de patterns comme les noms propres, les noms de villes, d'entreprises ou de marques. Un peu comme les inserts de Vibrant Media. La technique était déjà proposée dans une extension à MS-Word.

En fait d'extensions, Microsoft proposait une liste prédéfinie par elle-même et ses partenaires. Attention, ce que Microsoft appelle “partenaires”, ce sont des entreprises multinationales plus puissantes que des gouvernements comme Universal, Time-Warner. Celles capables de faire adopter à des gouvernements démocratiques des lois liberticides comme la LCEN, la DADVSI, etc… et de transformer des ordinateurs achetés en systèmes de flicages
Et évidemment, en fait de partenariat, Microsoft aurait forcément monétisé de si beaux espaces publicitaires si bien ciblés. Après tout, c'est une entreprise dont le but premier est de générer des bénéfices.

Or ces insertions n'ont jamais dépassé les béta dans MSIE. C'est tout juste si les Smart Tags ont été aperçues dans quelques bétas développeurs de MS Windows XP que le grand public n'a jamais eu.
Et pour cause : cela s'appelle de la monétisation sauvage d'un contenu qui soit refuse l'insertion publicitaire, soit d'un support qui vit elle-même par de la publicité. Des bannières insérées sans l'accord de l'éditeur de la page web ainsi parasitée. Imaginez une page d'Amnesty International avec des liens surgissants vantant la Chine, ou un article sur la barbarie de la peine de mort et de la chaise électrique avec des pubs pour ConEd ou ÉDF. Les essais montraient des popups suggérant des voyages à destination de Nice sur le mot “nice”, pourtant courant en Anglais.

Les levées de bouclier furent immédiates sur cette “éditorialisation” sauvage du contenu, le très probable espionnage d'activité et donc viol de la vie privée des internautes, mais aussi les détournement possibles par n'importe quel adware qui s'installent en opt-out (repensez à Buddy Companion et tous les autres logiciels de pollution de MS Windows à l'époque férocement “populaires”).

C'est, à ma connaissance, l'une des rares fois durant le règne de BillG que Microsoft a tenu compte de l'avis du public dans un logiciel (faussement) gratuit. Et quand je parle d'un avis, c'était carrément une bronca générale. Et pourtant, à ce moment-là, MSIE était quasi seul et régnait en maître en en monopole face à un Netscape mourant, un Mozilla connu que des barbus et un Konqueror embryonnaire. Microsoft aurait pu faire ce qu'ils voulaient.
Mon opinion est que le retour prépondérant fut celui de leur propre service juridique. Celui-ci a dû faire un putain de sursaut.

Exit les Smart Tags.

Cette histoire est tellement épisodique qu'il m'est impossible de retrouver une seule capture d'écran sur le net.
Par contre, il n'est pas rare de trouver dans les codes sources des sites voire des CMS (la toute dernière version de Dotclear l'y met toujours) cette balise :

<meta name="MSSmartTagsPreventParsing" content="true" />
Étonnement, ce code tient un peu du maraboutage et de la croyance pieuse que tout ce qui vient de Microsoft c'est le Mal. Avec les parts de marché déclinantes de MSIE, soyez sûrs que cette balise n'a aucune chance d'avoir une quelconque utilité.

Ensuite il y eu la Image Toolbar

Tu parles d'une toolbar, il s'agit plutôt une popup contextuelle.
Bon, il se trouve qu'on peut supprimer cette toolbar par d'autres solutions qu'en polluant le code HTML par la balise <head></>

<meta http-equiv="imagetoolbar" content="no" />
ou l'insertion d'un attribut (non-valide car proprio) dans chacune de vos balises <img />
<img src="image.png" galleryimg="no" />
à savoir une solution JScript par manip DOM. Ce qui signifie qu'en plus de commentaires conditionnels supplémentaires, on doit alourdir d'un programme javascript complémentaire, avec les risques que cela induit, car il faut avouer que MSIE6 n'est pas franchement super à l'aise quand on fait de la manip DOM. On peut même parler d'explosions en vol, de messages abscons voire d'accusations mensongères (genre « Ce site n'est pas connecté à internet », si si !). Ceux qui ont tâté de l'AJAX dans les tripes m'ont bien compris.


Et évidemment, cette cochonnerie de “toolbar” apparait même en affichant directement une image. Pratiquement aussi chiante que les ballons de la barre de tâche ou Clippy dans MS-Office.

Il se trouve que dans MSIE7, cette fonction d'assistance a été retirée, preuve qu'elle devait être bien agaçante à l'usage, et régulièrement désactivée par le staff de Microsoft (dans un paramètre caché au fond à gauche du couloir C, 3ème sous-sol)

8 années passèrent

…soit 4 générations en informatique.
C'est pas rien, et c'est dire l'immense retard qu'a fait perdre MSIE6 en crédibilité à Microsoft. Même les développeurs chevronnés du web n'en voulaient plus et libéraient leurs ordinateurs, ce qui rendait tout à fait hypothétiques l'adoptions de technologies propriétaires maisons comme Silverlight, C#, ASP, .Net, XAML,…

Afin de redorer leur blason, nos amis de la IE-Team chez Microsoft ont fait d'IMMENSES efforts pour être compatibles.
Sans rire.

Mais le principal problème, c'est qu'à force de tenter d'être le plus proche possible des standards appliqués par les autres navigateurs, ils sont arrivés à ne plus afficher correctement les sites webs existant. Face à ce constat, ils ont tenté de mettre un bouton.


Une page cassée… avouez qu'il y a plus heureux comme picto.

Évidemment, après quelques tests, il est apparu que la plupart des utilisateurs ne comprennaient absolument pas son fonctionnement. Eh oui, trop geek ! Autre souci, c'est que certains sites, et pas les plus petits ressortent complètement blancs.

Alors les shadocks se réunirent, et firent tourner leur machine à idées. Ils pompèrent, pompèrent, pompèrent et pondirent un œuf.

Version targetting, parce que les erreurs sont éternelles...

C'est dont une rebelote avec MSIE 8, qui propose le version targetting, une sorte de ressucée du doctype switching (d'ailleurs, il permet de définir si le doctype switch va du quirks MSIE5 vers un strict MSIE8 ou strict MSIE7). Cela consiste à ajouter une balise meta particulière dans vote code html.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
Ce qui permettra d'afficher “correctement” les sites “optimisés” pour MSIE6 et MSIE7. Façon pudique de dire qu'ils sont bien conscient que chaque nouvelle version entraîne une épidémie de crises de nerfs auprès des webdesigners.
Afin de faire passer la pilule, la IE-Team propose de le remonter dans le standard HTML ; et d'en standardiser le fonctionnement si d'autres navigateurs ont le même souci. On sait jamais, la concurrence peut très bien faire un faux-pas tout comme eux.

Eh oui, c'est un constant d'échec : pour que vos sites fonctionnent comme avant, il faut encore enfler vos <head></>.

Mais la plaisanterie ne s'arrête pas ici. Non seulement ils proposent aux sites de rester dans des rendus pré-historiques, mais pour que les sites les plus fréquentés ne présentent pas une page blanche, certaines adresses entraînent automatiquement le passage en mode MSIE7.
Vous imaginez le gag si un de ces sites tente de passer MSIE8 à son mode strict standard ? Du bordel en plus.

Non seulement MSIE, quels que soient les efforts qu'ils puissent fournir, est le seul navigateur à réussir à vous obliger à revenir sur tous vos anciens sites pour qu'ils continuent à tourner comme avant (Allez expliquer ça à vos clients…), mais en plus, le seul navigateur dont le fonctionnement varie suivant les sites. Oui, il ne sera pas constant dans tout le Net.

Bravo.

S'il fallait arriver à concevoir un navigateur respectueux des standards, la première des choses à faire serait que sont fonctionnement soit absolument constant, quel que soit l'organisation/l'IRI originaire du code source (cela s'appelle une standardisation), et la deuxième serait qu'il n'y ai pas de régression dans le fonctionnement.

Et dans mon métier (celui de développeur web en freelance) et celui de mes camarades de jeu, nous vendons des sites conçus dans les règles de l'art. Avec une idée directrice, sa conformité aux standards est un garant de son futur.
Vous imaginez votre crédibilité si 6 mois après, votre client vous dit que le site n'afficher qu'une page intégralement blanche avec le nouveau MSIE. Même si l'intervention est triviale, c'est pas un cadeau qu'il nous font. On va même finir par les re-haïr.

MSIE version 8 vient d'échouer dans deux règles de bases pour ce qui est de respecter un standard perenne. Et j'ai peu d'espoir que ce genre de comportement stupide ne reste qu'un souvenir de béta version.

On peut dire qu'ils ont réussi à faire très con là où ils ne le voulaient vraiment pas.

fumble.

Moralité


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Bonjour, cher client</title>

	<!-- Bordel dévolu exclusivement à MSIE -->
	<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/favicon.ico" />
	<!-- MSIE4 pour téléphones mobiles -->
	<!--[if IE 4]>
		<link rel="stylesheet" type="text/css" href="/msie4mobile.css" />
	<![endif]-->
	<!-- MSIE6, qui retombe en quirksmode -->
	<meta name="MSSmartTagsPreventParsing" content="true" />
	<meta http-equiv="imagetoolbar" content="no" />
	<!--[if IE 6]>
		<link rel="stylesheet" type="text/css" href="/msie6quirksmode.css" />
		<script type="text/javascript" src="/msie-Flash-Eolas.js"></script>
		<script type="text/javascript" src="/msie-Button-correction.js"></script>
		<script type="text/javascript" src="/msie-Abbr-manquant.js"></script>
		<script type="text/javascript" src="/msie7.js"></script>
	<![endif]-->
	<!-- MSIE7 qui est en strictmode -->
	<!--[if IE 7]>
		<link rel="stylesheet" type="text/css" href="/msie7.css" />
		<script type="text/javascript" src="/msie7.js"></script>
	<![endif]-->
	<!-- MSIE8 parce qu'on sait jamais -->
	<meta http-equiv="X-UA-Compatible" content="IE=8" />

	<!-- Fini MSIE. Passons maintenant aux navigateurs sérieux -->

	<link rel="stylesheet" type="text/css" href="/style.css" />
	<link rel="icon" type="image/png" href="/favicon.png" />
	<script type="text/javascript" src="/fonctions.js"></script>
</head>

Message personnel à tous ceux qui travaillent exclusivement pour la chapelle Microsoft : Vous endurez ça comment ?