Je rage devant tous ces afficionados qui veulent être à la pointe et qui tout en crachant sur les mode de compatibilité et doctype switching, forcent les futurs navigateurs à reproduire les mêmes problèmes.
N’utilisez pas « X-UA-Compatible : IE=Edge ». C’est inutile et contre-productif.
Un pari risqué sur l’avenir
Avec cette entête, on déclare explicitement une compatibilité avec tout moteur Internet Explorer futur. Celui de dans deux ans ou celui de dans cinq ans.
Avec le passé des navigateurs, l’histoire du doctype switching, les modes de compatibilité et les ruptures de compatibilité diverses, c’est quand même un pari qui semble perdu d’avance.
La question n’est pas tellement de savoir si vous codez « standard », mais que le standard peut évoluer ou se préciser, que certaines fonctionnalités peuvent être abandonnées, ou que certains bugs peuvent être corrigés en introduisant des effets de bords sur vos pages. Même ceux qui codent « standard » jusqu’au bout des ongles choisissent en général tel ou tel montage pour contourner les manques ou différences des navigateurs et que ces manques et différences évoluent avec le temps.
Le problème n’est pas vos pages ou votre code, c’est l’environnement autour.
Et encore, je laisse de côté ceux qui s’attachent tellement fort aux standards qu’ils finissent pas n’utiliser que des fonctionnalités avant leur stabilisation voire avec préfixées dans des versions de test. Eux *vont* des problèmes, mais ils le méritent.
… (le plus souvent) inutile
Le système est fait pour trois cas :
- Permettre à un site codé pour une ancienne version d’Internet Explorer et non compatible avec les suivantes, de bloquer le moteur de rendu à cette version précise.
- Permettre à un intranet ou à un site autrefois liste noire pour incompatibilité historique, après une refonte et en attendant d’être retiré des listes noires, de déclarer pouvoir/vouloir désormais utiliser les versions récentes du moteur d’Internet Explorer.
- Permettre à un site incompatible avec les anciennes versions d’Internet Explorer d’être embarqué via une iframe dans un site non compatible (soit sur liste noire, soit qui demande explicitement une ancienne version du moteur)
Si vous n’êtes pas dans un de ces trois cas, il est très probable que vous n’ayez pas besoin d’une entête X-UA-Compatible. Pour utiliser la dernière version respectueuse des normes du moteur d’Internet Explorer, il vous suffit de coder des pages valides avec un doctype correct et sans prologue XML.
Sauf à être dans un des cas précédents, le X-UA-Compatible n’apportera rien de plus à part les effets négatifs qui seront décrits plus haut.
Mais si vous souhaitez quand même un opt-in
Même si vous vous retrouvez dans un des trois cas décrits plus haut, ou si vous souhaitez quand même être explicite, se déclarer explicitement compatible avec de futures versions qui n’ont même pas commencé à voir le jour est toujours aussi risqué.
Vous avez testé avec IE10 ? alors déclarez IE=10. Vous n’aurez rien de moins que prévu, même si un IE11 ou un IE12 sortent. Si ces prochains n’introduisent pas de problème de compatibilité, il est probable que vous bénéficierez de toutes façons du nouveau moteur. À l’inverse, s’il y a rupture de compatibilité majeure, vous aurez probablement moins de problèmes avec un mode de compatibilité « IE=10 » qu’avec un nouveau moteur incompatible « IE=Edge ».
Vous avez tout à gagner à être honnête et à déclarer la compatibilité réelle de vos pages. Au pire le site développé pour IE10 continuera d’être vu avec un moteur compatible avec ce que proposait IE10. Est-ce vraiment si peu souhaitable ?
Si ces pages sont toujours en maintenance active lors d’une nouvelle version du moteur IE *et* que ce moteur est compatible avec la version précédente *et* pourtant qu’il décide de passer en compatibilité quand vous précisez IE=[la_version_précedente] (vous remarquerez que les deux dernières conditions sont assez incohérentes entre elles), alors il vous sera facile de mettre à jour la déclaration. L’avantage c’est que si une de ces hypothèses devient invalide à l’insu de votre plein gré, au moins ça continuera à fonctionner comme avant et comme prévu.
À quoi ça sert alors ?
Le mode IE=Edge est utile à condition que vous testiez toutes les pages différentes à chaque nouvelle beta d’Internet Explorer, et ce tant qu’au moins une de vos pages est en ligne (chez vous ou chez un tiers).
Ça peut être votre cas si vous avez un petit site et que vous avez du temps à y passer. C’est toutefois un pari sur le fait que vous restiez en maintenance active et que vous aurez du temps à perdre à l’avenir. Je ne compte pas le nombre d’applications ou de sites abandonnés qui sont en théorie en maintenance ou dont on pensait qu’ils seraient encore en maintenance.
Le plus souvent IE=Edge c’est surtout pour les sites en développement, et ça devrait y rester cantonné.
Mon problème n’est pas tant que vous choisissiez d’utiliser une déclaration IE=Edge, à vrai dire vous faites ce que bon vous semble et comme je n’utilise pas IE je n’aurai pas à en souffrir. Mon problème c’est quand ça arrive en recommandation ou en bonne pratique à destination des développeurs. Là désolé de vous le dire, mais vous avez fauté. Vous engagez fortement un tiers à quelque chose dont je doute qu’il ait saisi toutes les implications, et ce pour un bénéfice qui reste franchement à démontrer.
Petite pensée pour l’avenir
Si trop de gens utilisent IE=Edge, et qu’Internet Explorer se sent obligé d’introduire une rupture de compatibilité significative, quelle(s) solution(s) leur restera-t-il ?
- Casser la compatibilité, mais ils ont prouvé que dans leur cas spécifique, sachant que leur moteur était fortement utilisé aussi pour les applications natives et pas que le Web, c’était franchement nocif
- Introduire un nouveau mécanisme d’auto-détection bancal comme le doctype switching et complexifier encore plus le développement web qui est déjà bien tordu à ce niveau si on prend en compte tous les modes de compatibilité
- Considérer que IE=Edge correspond en fait à IE=13 (par exemple) et créer un nouveau mot clef pour le remplacer, ou ajouter un suffixe explicite ; ceux qui ont joué avec les User-Agent savent combien ce mode de fonctionnement a ses limites
Même du point de vue du web, en trichant à ce niveau vous n’aidez pas le web à rester à jour, vous risquez surtout de le casser ou de le complexifier. À bon entendeur…
Laisser un commentaire