Naar inhoud springen
SilktideHelp

Sneltoetsen met tekens

Silktide vindt pagina's waarop een toetsenbordlistener voor de hele pagina is geregistreerd - het document, het venster of <body>/<html> - en vraagt je te controleren of sneltoetsen met één teken een uitweg nodig hebben.

Bekende voorbeelden zijn op j drukken om omlaag te scrollen, op / drukken om de zoekfunctie te activeren, of eerst g en daarna h indrukken om naar de startpagina te gaan.

Dit is een : een globale keylistener is een echte reden om dit te bekijken, maar Silktide kan op basis van de registratie alleen niet vaststellen of de handler een sneltoets met één teken implementeert. Pagina's zonder globale keylistener worden niet gemarkeerd.

Waarom dit belangrijk is

Twee groepen hebben veel last van sneltoetsen met één toets die altijd actief zijn:

  • Gebruikers van spraakinvoer dicteren tekst en opdrachten hardop. Software zet hun spraak om in toetsaanslagen, waardoor een gewone zin verandert in een reeks onbedoelde activeringen van sneltoetsen - pagina's kunnen verspringen, dialogen kunnen worden geopend en acties kunnen midden in een zin worden uitgevoerd.
  • Mensen met beperkte handvaardigheid of tremoren slaan regelmatig toetsen aan die ze niet bedoeld hebben, en elke afzonderlijke toets kan een actieve trigger zijn.

Succescriterium 2.1.4 (niveau A) van vereist daarom dat sneltoetsen met één teken kunnen worden uitgeschakeld, opnieuw kunnen worden toegewezen met een modificatietoets zoals Ctrl of Alt, of alleen werken wanneer het relevante element heeft.

Zo los je dit op

Doe voor elke globale toetsenbordhandler die een sneltoets met één teken implementeert een van de volgende dingen:

  1. Bied een instelling waarmee de sneltoetsen worden uitgeschakeld.
  2. Vereis een modificatietoets, zodat de sneltoets bijvoorbeeld Ctrl+K wordt in plaats van k.
  3. Verwerk de toets alleen wanneer het relevante element focus heeft - sneltoetsen die beperkt zijn tot een element met focus zijn expliciet toegestaan.
// Wordt uitgevoerd telkens wanneer "k" ergens op de pagina wordt ingedrukt
document.addEventListener('keydown', (e) => {
  if (e.key === 'k') openSearch();
});

// Opgelost: vereist dat Ctrl (of Cmd) wordt ingedrukt
document.addEventListener('keydown', (e) => {
  if (e.key === 'k' && (e.ctrlKey || e.metaKey)) openSearch();
});

Als een gemarkeerde listener geen sneltoetsen met één teken heeft - of al een van deze uitwegen biedt - de bevinding goed.

Zo test Silktide dit

  1. Verzamel de toetsenbord- die de pagina in de browser registreert.
  2. Houd alleen paginabrede listeners over - listeners die aan het document, het venster of het element <body>/<html> zijn gekoppeld. Listeners op afzonderlijke elementen zijn vrijgesteld, omdat ze alleen worden geactiveerd wanneer dat element focus heeft.
  3. Rapporteer elke overgebleven listener zodat jij deze kunt bevestigen. Silktide doorzoekt de broncode van de handler niet op patronen zoals e.key === '…' - dat is te kwetsbaar voor geminificeerde code en frameworkcode. De aanwezigheid van een globale keylistener is het signaal; jouw beoordeling is het oordeel.

Problemen oplossen

De listener is geen sneltoets met één teken

Veel globale keyhandlers letten alleen op Escape, pijltoetsen of combinaties met modificatietoetsen. Als die van jou geen sneltoetsen met één teken heeft, keur je de bevinding goed.

De sneltoets kan al worden uitgeschakeld of opnieuw toegewezen

Silktide kan de registratie van de listener zien, maar niet of je site een instelling biedt om deze in of uit te schakelen. Als dat zo is, voldoet de pagina - keur de bevinding goed.

Sneltoetsen uit scripts van derden

Chatwidgets, videospelers en Analytics-tools registreren soms hun eigen globale keylisteners. Ze tellen nog steeds mee voor je pagina; controleer de toegankelijkheidsopties van de leverancier of neem contact met hen op.

Sneltoetsen die zijn gemaakt met het accesskey-attribuut

Deze vallen afzonderlijk onder de controle Accesskey-attribuut; deze controle gaat over sneltoetsen die in een script zijn geïmplementeerd.

Meer informatie

Laatst bijgewerkt

Was deze pagina nuttig?