RGAA 4.1.2 · Scripts · Critère 7.1
Chaque script est-il, si nécessaire, compatible avec les technologies d’assistance ?
Un composant reconstruit en `<div>` n'a ni nom, ni rôle, ni état : le lecteur d'écran annonce « groupe », l'utilisateur ne sait ni ce que c'est, ni s'il est ouvert, ni ce qui vient de changer.
Ce que dit le référentiel
Transcription du RGAA 4.1.2, sans interprétation. C’est ce texte qui fait foi, et celui que vous citez dans un rapport.
- 7.1.1 Chaque script qui génère ou contrôle un composant d’interface vérifie-t-il, si nécessaire, une de ces conditions ?
- Le nom, le rôle, la valeur, le paramétrage et les changements d’états sont accessibles aux technologies d’assistance via une API d’accessibilité ;
- Un composant d’interface accessible permettant d’accéder aux mêmes fonctionnalités est présent dans la page ;
- Une alternative accessible permet d’accéder aux mêmes fonctionnalités.
- 7.1.2 Chaque script qui génère ou contrôle un composant d’interface respecte-t-il une de ces conditions ?
- Le composant d’interface est correctement restitué par les technologies d’assistance ;
- Une alternative accessible permet d’accéder aux mêmes fonctionnalités.
- 7.1.3 Chaque script qui génère ou contrôle un composant d’interface vérifie-t-il ces conditions (hors cas particuliers) ?
- Le composant possède un nom pertinent ;
- Le nom accessible du composant contient au moins l’intitulé visible ;
- Le composant possède un rôle pertinent.
Comment le vérifier
- Recenser les composants pilotés par script : tout ce qui s'ouvre, se ferme, se déplie, se sélectionne, se trie ou se fait glisser.
- Pour chacun, inspecter l'arbre d'accessibilité — pas le DOM — et vérifier qu'il porte un rôle, un nom, et les états correspondant à ce qu'on voit (
aria-expanded,aria-selected,aria-checked,aria-current). - Manipuler le composant et vérifier que les états suivent : c'est là que la plupart échouent, l'attribut étant posé au chargement puis jamais mis à jour.
- Vérifier ensuite avec un lecteur d'écran réel que tout cela est effectivement restitué — un balisage conforme peut rester muet ou incompréhensible.
- Vérifier enfin que le nom accessible contient l'intitulé visible du composant, et que le rôle choisi correspond à ce que le composant fait vraiment.
- À défaut, chercher si la page offre un composant natif équivalent ou une alternative accessible donnant accès aux mêmes fonctions.
Ce que notre outil fait
Assisté
Le moteur repère les éléments concernés et vous pose la question. Il ne conclut pas à votre place.
Le moteur vérifie tout ce qui est vérifiable dans le balisage ARIA : rôle valide, propriétés requises présentes, valeurs bien formées, attributs autorisés pour le rôle, contexte et enfants requis, nom accessible sur les composants qui en exigent un. Il vérifie aussi qu'un composant nommé par un aria-label garde son intitulé visible dans ce nom — un bouton hors formulaire relève de ce critère, celui d'un formulaire du 11.9, un lien du 6.1. Ce qu'il ne vérifie pas — et qui fait la moitié du critère — c'est que l'état déclaré corresponde à l'état réel, et que le composant soit correctement restitué par une technologie d'assistance. Un composant qui passe toutes les règles peut encore échouer au 7.1.
Règles ACT du W3C mises en œuvre : 4e8ab6, ff89c9, bc4a75, 5c01ea, 6a7281, kb1m8s, 307n5z, m6b1q3, 2t702h, 2ee8b8
Comment nous mesurons ce que l'outil sait faire · ce critère s'audite dans l'extension RGAA Lab.
Les pièges
Les erreurs qu’on rencontre vraiment, relevées au fil des audits.
aria-expandedposé sur le conteneur au lieu du bouton qui commande l'ouverture : l'information existe, personne ne l'entend.- Un rôle emprunté de loin —
role="tablist"sur une liste de filtres — trompe plus qu'il n'aide. Aucun ARIA vaut mieux qu'un ARIA faux : sans rôle, l'utilisateur entend au moins des liens ou des boutons. - Un composant natif fait presque toujours mieux :
<details>,<select>,<input type="date">arrivent avec leur rôle, leurs états et leur clavier. - Le 7.1 se juge composant ouvert. Un menu audité fermé ne montre rien de ce qui pose problème.