URL: https://linuxfr.org/users/benoar/journaux/le-grand-remplacement-des-navigateurs-web-d-avant-2020 Title: Le grand remplacement des navigateurs Web d’avant 2020 Authors: benoar Date: 2023年08月24日T12:55:01+02:00 License: CC By-SA Tags: javascript, brouteur et navigateur_web Score: 27 Bonjour, nal, Je ne vais pas faire très recherché, mais peut-être que ce journal servira de référence pour ceux qui utilisent des vieux browsers et qui ne souhaitent pas se faire dicter les logiciels qu’ils utilisent : depuis quelques mois (voire une année), j’observe qu’un paquet de sites webs ne fonctionnent *plus du tout*, à tel point qu’aujourd’hui les parties consultables « à l’ancienne » sont très marginales. Certes, j’ai l’habitude de ces inconvénients, naviguant sans Javascript activé par défaut depuis une petite dizaine d’années, et ayant pris le réflexe de l’activer sélectivement quand je voulais vraiment voir certains contenus. J’ai déjà appris à renoncer à accéder à certains contenus depuis longtemps, mais là ça devient vraiment très handicapant. Le coupable ? « L’optional chaining » de Javascript, une fonctionnalité qui permet de ne pas avoir à tester si une propriété d’un objet est existante avant d’accéder à une de ses sous-propriétés, i.e. on évite un if, quoi. C’est arrivé avec la norme [ECMAScript 2020](https://en.wikipedia.org/wiki/ES2020#ES2020) et ça s’écrit par exemple : ```const zipcode = person?.address?.zipcode``` C’est à ma connaissance le premier *changement de syntaxe* de Javascript depuis belle lurette ; je dirais au moins 15 ans. Et contrairement à toutes les évolutions précédentes récentes, qui étaient plutôt des évolutions des modules ou structures fournies par le moteur ou la « lib standard » (parler de standard avec JS, comment dire...), ce changement n’est *pas* contournable avec un polyfill comme beaucoup de développeurs avaient pris l’habitude de faire pour palier aux manques des vieux navigateurs par le passé. Du coup, avec mon vieux Firefox, j’arrive sur une site qui donne une page blanche ; normal, je n’ai pas de JS activé. J’active le JS et... j’ai toujours une page blanche (ou noire), avec cette fois-ci une erreur de syntaxe dans la console : ```SyntaxError: expected expression, got '?'``` Vous allez me dire que ça ne doit concerner que certains développeurs et certains sites, peu soucieux de la rétro-compatibilité, non ? Et bien non, puisque la raison de l’arrivée massive de ce problème ces derniers mois c’est son inclusion dans toutes les bibliothèques Javascript « classiques » style Angular, Vue ou autre (je ne suis pas au fait duquel est à la mode aujourd’hui, veuillez me pardonner). Comme aujourd’hui quasiment tout le monde utilise ces « standards de fait » plutôt que d’utiliser le DOM — qui lui est un vrai standard — et bien on se retrouve d’un coup avec un cassage immense pour du Web pour un certain nombre de personnes, bien que le développeur du site n’en ait pas forcément conscience. Rendez-vous compte : un paquet de vieux navigateurs et vieilles machines continuaient de marcher autant que faire se peut, et cela suffisait pour beaucoup de gens. Mais cette dernière année, on a simplement *définitivement cassé le Web* pour toute personne ayant une machine où un logiciel datant de plus de trois ans. Je sais bien que pour les développeurs JS vivant dans le monde technologique magique du Web, trois ans c’est la préhistoire, mais je n’avais jamais observé de ma vie un changement si drastique pour tant de gens. Mais personne n’en parle parce que ceux visés ne sont pas ceux qui râlent sur Twitter ou qui connaissent les gens d’influence. Ils vont simplement racheter une nouvelle machine plus tôt que prévu (bah oui, leur vieux téléphone ne peut pas être mis à jour, et ça doit leur paraître trop compliqué pour leur PC ; de toutes façons un PC ça ne sert plus à rien, ils vont sûrement acheter un téléphone à la place). Notez au passage qu’il existerait bien une solution si les développeurs de ces bibliothèques centralisées décidaient de générer leur code (puisque qu’il est déjà passé à la moulinette d’un certain nombre de filtres) avec un truc style Babel ; je ne connais pas son fonctionnement en détail, mais en gros il permet de générer du code compatible avec des anciens standards JS. Mais je ne sais pas pourquoi c’est aujourd’hui, en 2023, que ces cassages ont commencé à arriver et qu’ils n’ont pas choisi ce chemin. Au final, je pense que ce genre de changement n’est qu’un avant goût de ce qui arrivera avec le [[Web Environment Integrity]], mais ça sera le sujet d’un autre journal.