Avançar para o conteúdo
SilktideAjuda

Atalhos de teclas de caracteres

O Silktide encontra páginas que registam um listener de teclado em toda a página — no documento, na janela ou em <body>/<html> — e pede-lhe que verifique se algum atalho de uma única tecla precisa de uma forma de o desativar.

Exemplos conhecidos incluem premir j para descer, / para focar a pesquisa ou g e depois h para voltar à página inicial.

Este é um : um listener de teclas global é um motivo real para investigar, mas o Silktide não consegue determinar apenas pelo registo se o manipulador implementa um atalho de uma única tecla. As páginas sem um listener de teclas global não são assinaladas.

Porque é importante

Dois grupos são particularmente afetados pelos atalhos de uma única tecla sempre ativos:

  • Utilizadores de entrada por voz ditam texto e comandos em voz alta. O software transforma a fala em teclas, por isso uma frase normal torna-se numa sequência de ativações acidentais de atalhos — as páginas podem saltar, as caixas de diálogo podem abrir-se e as ações podem ser executadas a meio de uma frase.
  • Pessoas com pouca destreza ou tremores premem regularmente teclas que não pretendiam premir, e qualquer tecla individual pode ser um acionador ativo.

O critério de sucesso 2.1.4 da (nível A) exige, por isso, que os atalhos de uma única tecla possam ser desativados, remapeados para incluir uma tecla modificadora, como Ctrl ou Alt, ou que só sejam acionados enquanto o controlo relevante tiver .

Como corrigir

Para cada manipulador de teclado global que implemente um atalho de uma única tecla, faça uma das seguintes ações:

  1. Disponibilize uma definição que desative os atalhos.
  2. Exija uma tecla modificadora, para que o atalho se torne, por exemplo, Ctrl+K em vez de k.
  3. Processe a tecla apenas enquanto o controlo relevante estiver focado — os atalhos limitados a um controlo focado são explicitamente permitidos.
// É acionado sempre que "k" é premido, em qualquer parte da página
document.addEventListener('keydown', (e) => {
  if (e.key === 'k') openSearch();
});

// Corrigido: requer que Ctrl (ou Cmd) esteja premido
document.addEventListener('keydown', (e) => {
  if (e.key === 'k' && (e.ctrlKey || e.metaKey)) openSearch();
});

Se um listener assinalado não tiver atalhos de uma única tecla — ou já oferecer uma destas formas de os desativar — o resultado.

Como o Silktide testa isto

  1. Recolhe os de teclado que a página regista no navegador.
  2. Mantém apenas os listeners que abrangem toda a página — os associados ao documento, à janela ou ao elemento <body>/<html>. Os listeners em controlos individuais estão isentos, porque só são acionados enquanto esse controlo estiver focado.
  3. Comunica cada listener restante para que o confirme. O Silktide não analisa o código do manipulador à procura de padrões e.key === '…' — isso é demasiado frágil perante código minificado e código de frameworks. A presença de um listener de teclas global é o sinal; a sua análise é o veredito.

Resolução de problemas

O listener não é um atalho de uma única tecla

Muitos manipuladores de teclas globais monitorizam apenas a tecla Escape, as teclas de seta ou combinações com teclas modificadoras. Se o seu não tiver atalhos de uma única tecla, aprove o resultado.

O atalho já pode ser desativado ou remapeado

O Silktide consegue ver o registo do listener, mas não consegue saber se o seu site disponibiliza uma opção de configuração para o desativar. Se disponibilizar, a página está em conformidade — aprove o resultado.

Atalhos de scripts de terceiros

Os widgets de conversação, os leitores de vídeo e as ferramentas de Analytics por vezes registam os seus próprios listeners de teclas globais. Contam da mesma forma para a sua página; verifique as opções de acessibilidade do fornecedor ou contacte-o.

Atalhos criados com o atributo accesskey

Estes são abrangidos separadamente pela verificação do atributo Accesskey; esta verificação abrange os atalhos implementados em scripts.

Saiba mais

Última atualização

Esta página foi útil?

Atalhos de teclas de caracteres | Ajuda da Silktide