Skróty klawiszowe wykorzystujące znaki
Silktide znajduje strony, które rejestrują nasłuchiwanie klawiatury dla całej strony —
dokumentu, okna lub elementów <body>/<html> — i prosi o sprawdzenie, czy
jakiekolwiek skróty jednoklawiszowe wymagają mechanizmu wyjścia.
Typowe przykłady to naciśnięcie j, aby przewinąć w dół, /, aby ustawić fokus w wyszukiwarce, lub
g, a następnie h, aby przejść do strony głównej.
Jest to : globalne nasłuchiwanie klawiszy jest uzasadnionym powodem, aby to sprawdzić, ale Silktide nie może stwierdzić wyłącznie na podstawie rejestracji, czy obsługa implementuje skrót jednoklawiszowy. Strony bez globalnego nasłuchiwania klawiszy nie są oznaczane.
Dlaczego to ważne
Dwie grupy są szczególnie dotknięte przez zawsze aktywne skróty jednoklawiszowe:
- Użytkownicy wprowadzający tekst głosem dyktują tekst i polecenia na głos. Oprogramowanie zamienia ich mowę na naciśnięcia klawiszy, więc zwykłe zdanie staje się serią przypadkowych aktywacji skrótów — strony mogą przeskakiwać, okna dialogowe mogą się otwierać, a działania mogą być uruchamiane w środku zdania.
- Osoby o ograniczonej sprawności manualnej lub z drżeniem rąk często naciskają klawisze, których nie zamierzały nacisnąć, a każdy pojedynczy klawisz może być aktywnym wyzwalaczem.
Kryterium sukcesu 2.1.4 (poziom A) wymaga zatem, aby skróty jednoklawiszowe można było wyłączyć, zmienić ich przypisanie tak, aby obejmowały klawisz modyfikujący, taki jak Ctrl lub Alt, albo aby działały wyłącznie wtedy, gdy odpowiednia kontrolka ma .
Jak to naprawić
Dla każdej globalnej obsługi klawiatury implementującej skrót jednoklawiszowy wykonaj jedno z poniższych działań:
- Udostępnij ustawienie wyłączające skróty.
- Wymagaj klawisza modyfikującego, aby skrótem było na przykład
Ctrl+Kzamiastk. - Obsługuj klawisz tylko wtedy, gdy odpowiednia kontrolka ma fokus — skróty ograniczone do kontrolki z fokusem są wyraźnie dozwolone.
// Uruchamia się za każdym razem, gdy naciśnięto „k”, w dowolnym miejscu na stronie
document.addEventListener('keydown', (e) => {
if (e.key === 'k') openSearch();
});
// Poprawione: wymaga przytrzymania Ctrl (lub Cmd)
document.addEventListener('keydown', (e) => {
if (e.key === 'k' && (e.ctrlKey || e.metaKey)) openSearch();
});
Jeżeli oznaczone nasłuchiwanie nie ma skrótów jednoklawiszowych — albo już oferuje jeden z tych mechanizmów wyjścia — wynik.
Jak Silktide to testuje
- Zbiera klawiatury, które strona rejestruje w przeglądarce.
- Zachowuje tylko nasłuchiwania obejmujące całą stronę — te dołączone do dokumentu,
okna lub elementu
<body>/<html>. Nasłuchiwania na pojedynczych kontrolkach są wyłączone, ponieważ uruchamiają się tylko wtedy, gdy dana kontrolka ma fokus. - Zgłasza każde pozostałe nasłuchiwanie do potwierdzenia. Silktide nie
analizuje kodu źródłowego obsługi pod kątem wzorców
e.key === '…'— jest to zbyt zawodne w przypadku zminimalizowanego kodu i kodu frameworków. Obecność globalnego nasłuchiwania klawiszy jest sygnałem; Twoja ocena jest werdyktem.
Rozwiązywanie problemów
Nasłuchiwanie nie jest skrótem jednoklawiszowym
Wiele globalnych obsług klawiszy reaguje tylko na Escape, klawisze strzałek lub kombinacje z klawiszami modyfikującymi. Jeśli Twoja obsługa nie ma skrótów jednoklawiszowych, zatwierdź wynik.
Skrót można już wyłączyć lub zmienić jego przypisanie
Silktide widzi rejestrację nasłuchiwania, ale nie widzi, czy Twoja strona oferuje przełącznik w ustawieniach. Jeśli go oferuje, strona jest zgodna — zatwierdź wynik.
Skróty ze skryptów innych firm
Widżety czatu, odtwarzacze wideo i narzędzia Analytics czasami rejestrują własne globalne nasłuchiwania klawiszy. Mimo to są uwzględniane dla Twojej strony; sprawdź opcje dostępności dostawcy lub zgłoś mu ten problem.
Skróty utworzone za pomocą atrybutu accesskey
Są one omówione osobno w kontroli Atrybut accesskey; ta kontrola obejmuje skróty zaimplementowane w skrypcie.