Singe, Scripts et compagnie.

Message 1, par Elzen

§ Posté le 04/10/2011 à 17h 17m 50

Derrière ce titre énigmatique se cachent en fait deux choses : d'abord, quelques explications techniques, puis une prise de position. Je sais que j'avais dit que j'essayais de séparer les deux, mais parfois, je trouve ce format beaucoup plus adapté pour l'un comme pour l'autre. Au moins, vous êtes prévenus : les deux parties sont bien indiquées, et si vous n'en voulez qu'une des deux, eh bien, vous n'avez qu'à ne pas tout lire.

Bref, le sujet du jour est donc JavaScript, que vos navigateurs vous proposent souvent d'activer ou de désactiver, mais sans trop vous expliquer ce que c'est.


I. les explications

Tout d'abord, une petite remarque concernant le nom : votre navigateur vous parle peut-être également, juste avant ou juste après JavaScript de « Java ». Les deux mots se ressemblent à dessein, et ceux qui ne sont pas calés dans ce domaine confondent parfois les deux. Nous allons donc faire la différence.


« Java » est un langage de programmation, c'est-à-dire plus ou moins un langage servant à donner des instructions à un ordinateur. C'est un langage assez particulier dans son genre, puisqu'il ne s'adresse pas directement à l'ordinateur, où à un « interpréteur » chargé de traduire ses instructions pour l'ordinateur, mais communique avec une « machine virtuelle ».

Je ne m'étalerais pas trop sur le sujet, ce n'est pas de ça que je voulais parler ici (demandez-moi si vous voulez davantage d'explications sur ces histoires de langage).

Toujours est-il que Java n'est pas forcément installé par défaut sur votre système (Mac OS X, je crois, en fournit une version par défaut, mais pour tous les autres systèmes « grand public », il faut l'installer manuellement). Et les outils qui tournent en Java ne sont pas directement lus par le navigateur : quand un site vous propose un « applet » Java, votre navigateur (si vous avez activé le fonctionnement de Java) va en fait télécharger un ensemble de programmes, qu'il va ensuite transmettre à la machine virtuelle de Java, et c'est elle qui se chargera de le lire.

Au niveau du mode de fonctionnement, c'est un peu le même principe que pour Flash, à ceci près que Java pose un peu moins de problèmes au niveau de l'éthique et de la sécurité (il existe, au moins pour les systèmes GNU/Linux, une version libre de Java). Au niveau du fonctionnement, ça reste un gros machin binaire alors que le Web est censé être basé sur du format texte.


JavaScript, en revanche, est également un langage de programmation, mais qui ne communique pas avec l'ordinateur, ni avec une machine virtuelle : il s'adresse uniquement au navigateur Web, qui le lit directement, sans avoir besoin de faire appel à un plugin. Et il ne fonctionne pas dans un « applet », mais permet d'agir sur la page actuellement affichée.

Pourquoi, si les modes de fonctionnement sont si différents, les noms sont-ils si proches ? Tout simplement parce qu'à l'époque où l'on a commencé à inventer JavaScript, le langage Java commençait à être à la mode, et que donc, les gens qui ont pensé JavaScript l'ont fait en s'inspirant de la syntaxe de Java. Quand on sait lire l'un de ces langages, on n'a donc pas beaucoup de difficultés à lire un truc qui est codé dans l'autre. La ressemblance s'arrête là.

D'ailleurs, depuis l'invention de ce langage, le Web a fait des progrès, et là comme ailleurs, des normes sont apparues et on été améliorées pour que tout puisse fonctionner quel que soit le navigateur utilisé. Le nom officiel du langage de script défini dans la norme est « ECMAScript ». Mais les navigateurs ont continué à parler de « JavaScript », ça fait moins peur.


Maintenant que le problème de vocabulaire est, je l'espère, réglé, passons à un peu plus de détails sur le « comment ça marche ».

Votre navigateur charge et affiche des pages HTML, qui contiennent les informations brutes (le texte, juste le texte, en tout cas la plupart du temps). Dans les méta-informations de ces pages se trouvent des liens vers d'autres documents qui servent à décrire le style d'affichage de la page (on parle de feuilles de styles CSS) et le script, qui nous intéresse maintenant. Le navigateur, en lisant la page HTML, va aller chercher ces autres documents, et s'en servir pour afficher correctement la page en cours.


Les feuilles de styles CSS permettent d'avoir de jolis résultats, mais seulement de manière statique (vous pouvez définir une couleur particulière pour un lien quand la souris passe dessus, ou faire apparaître des notes au survol comme ça m'arrive régulièrement ici, mais ça s'arrête là). Les scripts, en revanche, permettent de modifier le contenu de la page.

C'est pour cela que c'est un langage de programmation à part entière, et pas seulement un langage de présentation de données comme les deux autres : c'est beaucoup plus puissant, mais aussi beaucoup plus complexe. Et comme c'est plus puissant, ça permet aussi de faire plus de bêtises(1).

Et surtout, ça permet aux concepteurs de sites de récupérer quelques informations supplémentaires sur l'utilisateur. Ce qui peut s'avérer intéressant (pour produire des statistiques d'utilisation, par exemple ; c'est à ça que sont censés servir les scripts estampillés « google-analytics »), mais peut poser des soucis concernant le respect de la vie privée.

Du coup, pas mal de gens désactivent leurs scripts, ou, pour un réglage plus nuancé, utilisent une extension de leur navigateur leur permettant de désactiver par défaut tous les scripts et de ne les réactiver que pour les sites auxquels ils font confiance.


Pour cette raison comme pour des raisons d'accessibilité, sauf cas très particulier, un bon créateur de site Web va s'assurer que ses pages sont entièrement accessibles lorsque les scripts sont désactivés, et que ceux-ci, lorsqu'activés, ne feront que rendre la navigation plus agréable, sans être indispensables.

Car la raison d'être principale de ces scripts est qu'effectivement, ils peuvent rendre la navigation beaucoup plus agréable. À tel point que des utilisateurs ont inventé une extension appelée « greasemonkey » (c'est le « singe » du titre de ce sujet) permettant d'appliquer leurs propres scripts aux pages web qu'ils visitent.

Cette extension, initialement développée pour le navigateur Mozilla Firefox, a été depuis portée sur quelques autres. Ainsi, Epiphany et Midori en proposent tous deux l'utilisation, et de très nombreux scripts sont disponibles sur le net. Malheureusement, tous les navigateurs ne sont pas (encore ?) en mesure de l'utiliser.


II. ma position

L'approche de greasemonkey me paraît intéressante sur bien des points. Principalement, parce qu'elle laisse le choix à l'utilisateur. Avec l'approche « classique » proposée par les différents navigateurs, les scripts, quand ils sont activés (ce qui est, me semble-t-il, le cas par défaut à peu près partout), s'exécutent automatiquement, et c'est à l'utilisateur de se débrouiller pour les désactiver.

Avec greasemonkey, au contraire, les scripts ne sont pas présents sur la page elle-même, donc pas exécutés automatiquement, mais c'est au contraire l'utilisateur qui choisit d'activer ceux qui lui plaisent.


Ayant quelques idées de scripts pouvant, à mon humble avis, améliorer l'expérience utilisateur, j'avais dans un premier temps pensé ne pas les intégrer aux pages, mais fournir à la place des liens pour que les utilisateurs le souhaitant puissent les utiliser avec greasemonkey.

Cependant, cette approche m'est apparue « injuste », car limitée aux navigateurs disposant d'une telle extension. Le navigateur Arora, par exemple, n'en a pour l'instant pas (même si c'est indiqué dans la liste des fonctionnalités sur lesquelles l'équipe de développement aimerait se pencher quand ils en auront le temps). Comme je connais quelques personnes qui utilisent Arora, ça m'embêtait un peu de développer quelque chose auquel elles n'auraient pas accès.


J'ai donc choisi une autre manière de procéder : mes scripts sont intégrés par défaut aux pages, et sont donc lus automatiquement par le navigateurs, mais ils ne font presque rien par défaut. Sauf page très spécifique, les seuls effets que j'ai laissé automatiquement activés sont, par exemple, la désactivation des champs de saisie(2) de l'identifiant et du mot de passe sur la page de connexion, quand vous indiquez vouloir vous connecter en tant qu'utilisateur non-identifié, ce qui me semble logique. Rien de plus envahissant.

Les autres effets disponibles, qui sont compatibles avec tous les navigateurs que j'ai testé (ce qui se limite à une partie de ceux sous licence Libre, je rappelle, donc signalez-moi les problèmes s'il en reste) sont à activer par l'utilisateur, par l'intermédiaire de cookies(3).

De cette manière, je pense que mes scripts sont accessibles à tous, sans pour autant être trop envahissants. Qu'en dites-vous ?


D'une manière plus générale, je considère que la possibilité offerte par greasemonkey d'appliquer ses propres scripts aux pages que l'on visite est une telle bonne idée qu'il ne devrait même pas s'agir d'une extension, mais directement d'une fonctionnalité native des navigateurs web.

Hélas, je crains que seul Midori ne soit dans ce cas, à ma connaissance, une extension est requise pour chacun des autres.


Au niveau des options de réglage, je pense aussi que les différents navigateurs gagneraient à proposer un filtre plus nuancé pour l'interdiction des scripts. Par exemple, il est souvent déjà possible, pour les cookies, de n'accepter que ceux qui proviennent du site actuellement visité, et pas ceux des autres sites dans lesquels celui-ci irait chercher ses informations. Pourquoi cela ne serait-il pas également possible pour les scripts ?


Enfin, voilà. La situation n'est sans doute pas idéale partout, mais je pense que j'ai fait ce que j'ai pu pour que, sur ce site-là, en tout cas, il n'y ait pas grand chose à redire. Si vous avez des remarques, je vous écoute.


Message 2, par helly

§ Posté le 04/10/2011 à 20h 13m 44

Le meilleur exemple des méfaits du javascript, c’est cette célèbre page des hamsters qui dansent.

Non franchement je doute réellement de l’intêret du javascript sur la majorité des sites.

Sur uzbleu, j’ai désactivé js, mais ajouté un script pour qu’il me dise quand il a bloqué du js.

Bhé sur 95% des sites où le JS a été bloqué, le site est parfaitement lisible sans js.

Dans les 5% restants, il y a 3% pour lesquels le js est vital mais pourrait être contourné.

Bref, grosso-modo, 98% du js est inutile ou pourrait être évité (selon l’institu hellymétrique-corp), et je pense que HTML5 devrait encore pouvoir offrir des outils pour éviter le javascript.

Message 3, par grim7reaper

§ Posté le 04/10/2011 à 20h 23m 40

Citation (Elzen)

ils ne font presque rien par défaut.

Ils font donc quand même quelque chose, donc y’a quoi comme autres choses à part l’exemple que tu cites ?


Et c’est toujours voulu (comme pour ton exemple) ou c’est juste que le script est obligé de faire quelque chose (ça me paraît bizarre mais bon…) ?



@helly : ouais enfin dans certains cas ça reste quand même fort utile même quand c’est dispensable. Genre sur mon site je l’utilise pour avoir la coloration syntaxique, alors oui on peut s’en passer mais ça reste plus sympa (si tu dis le contraire alors tu peux te contenter de notepad pour coder :p)

Message 4, par Elzen

§ Posté le 04/10/2011 à 21h 09m 24

@helly : y a quand même tous les boutons d'aide à l'écriture sur les forums qui, si on peut s'en passer quand on a l'habitude de taper son BBCode à la main, sont quand même bien utiles au débutant.


@grim7reaper : la coloration syntaxique pourrait aussi être générée côté serveur, remarque. Mais dans ce cas, l'intérêt de JavaScript est de distribuer un peu la charge de la mise en forme au client, parce que si le serveur (surtout un petit serveur de particulier, c'est sûr que Google et compagnie n'ont pas ce problème) devait tout faire entièrement à chaque page qu'on lui demande, il souffrirait quand même.


Sinon, pour répondre à ta question : bah y a quand même un truc que le script est « obligé » de faire à chaque fois : lister les cookies pour vérifier si l'utilisateur a, ou non, demandé l'activation de telle ou telle fonction. Étant donné que c'est un script intégré aux pages et non pas un script « installé » comme dans le cas de greasemonkey, je suis obligé de faire un traitement pour vérifier quels traitements j'ai à faire.


Sinon, il y a aussi la page d'accueil : si JavaScript n'est pas activé, le formulaire permettant d'activer/de désactiver les options est lui-même désactivé, je trouve ça plus parlant que de fournir une série de boutons/cases à cocher qui ne font rien. Du coup, le script de la page d'accueil les active tous automatiquement au démarrage, sans qu'on lui demande rien.


C'est à peu près tout pour ce qui est en ligne pour le moment, mais dans quelques pages que j'ai à récupérer, il y en a qui font des trucs bizarres, et donc pour lesquelles le script est activé par défaut (du genre, un truc qui convertis automatiquement une longueur d'onde lumineuse en couleur hexadécimale)


J'n'ai pas encore posté de code dans la section prévue à cet effet (ça va venir vite, j'espère, mais j'suis un peu débordé pour le moment), mais vous pouvez déjà regarder les scripts en filant directement l'URL à votre navigateur, j'ai essayé de faire propre et lisible ^^

Message 5, par grim7reaper

§ Posté le 04/10/2011 à 21h 40m 12

Citation (Elzen)

la coloration syntaxique pourrait aussi être générée côté serveur, remarque.

Oui. Je sais qu’il y a beaucoup de trucs pour faire ça en PHP (et sûrement avec Python et Ruby aussi), mais comme pour le moment je ne veux pas installer ce genre de chose sur mon serveur bah l’ECMAScript (:p) ça reste le plus simple et le plus propre.

En plus, si j’utilise un truc genre PHP il me semble que ça va modifier le code HTML servi à l’utilisateur (genre ajouter des balises ou je-ne-sais-quoi), nan ? Si oui, bah mon code HTML va être moins bot-friendly et c’est un peu dommage.

Après, c’est sûr que l’argument de le charge que tu cites peut compter. Mais vu mon taux de fréquentation, je ne pense pas que ça pose trop de soucis ^^

Message 6, par helly

§ Posté le 04/10/2011 à 21h 50m 26

Oui, la coloration syntaxique, ça fait partie des 2% :).

Message 7, par Elzen

§ Posté le 10/12/2012 à 21h 21m 29

Bon, quelques changements avec la modif du site : pour l'essentiel, le script continue de mouliner dans le vide tant qu'aucune option n'a été activée, mais j'ai rajouté deux comportements spécifiques activés par défaut :



Sinon, comme vous vous en êtes sûrement rendu compte, il n'y a plus de formulaire désactivé sur la page d'accueil ; celui-ci est maintenant entièrement généré par JavaScript sur la page dédiée.

(Suite au décès inopiné de mon précédent serveur, je profite de mettre en place une nouvelle machine pour essayer de refaire un outil de blog digne de ce nom. J'en profiterai d'ailleurs aussi pour repasser un peu sur certains articles, qui commencent à être particulièrement datés. En attendant, le système de commentaires de ce blog n'est plus fonctionnel, et a donc été désactivé. Désolé ! Vous pouvez néanmoins me contacter si besoin par mail (« mon login at ma machine, comme les gens normaux »), ou d'ailleurs par n'importe quel autre moyen. En espérant remettre les choses en place assez vite, tout plein de datalove sur vous !)