Как заставить программу чтения с экрана перестать воспринимать игру HTML5 как документ? - PullRequest
2 голосов
/ 14 октября 2019

Я работаю над HTML5-игрой, которая полностью состоит из элемента canvas, занимающего всю страницу. Я использую NV Access , чтобы проверить, как он работает с программами чтения с экрана. Используя скрытый div с role="alert", который я обновляю с помощью JavaScript, я могу заставить программу чтения с экрана читать текст.

Тем не менее, в NV Access уже есть клавиатурные команды практически для каждой клавиши клавиатуры, поэтому при попыткечтобы управлять игрой с помощью WASD, клавиш со стрелками или чего-то еще, кроме игрового контроллера, он перехватывает нажатия клавиш до того, как игра сможет их обработать.

Я установил role="application" наи тело страницы, и холст в отдельных тестах и ​​ни одна позиция, казалось, ничего не изменили.

Единственный контекст, в котором я мог получить NV Access для управления вкладкой браузера, - это добавление скрытого текстового поля на страницу исосредоточив внимание на том, что работало, но имело побочный эффект чтения с экрана при каждом нажатии клавиши, что приводило к тому, что перемещение персонажа всегда сопровождалось звуками "ss sssssssssss. dd dddddddddd."

По сути, это то, как выглядит страница игры:

<body role="application">
    <div>
       <div id="screenRead" role="alert"></div>
       <canvas id="background"></canvas>
       <canvas id="foreground"></canvas>
    </div>
</body>

В идеале все нажатия клавиш (за исключением действий управленияТакие, как Alt + Tab, Ctrl + Tab и т. д.) будут приниматься самой вкладкой браузера, а не распознаваться программой чтения с экрана. Поскольку элементы управления проигрывателем настраиваются, добавление исключений для нескольких клавиш не будет работать (и, во всяком случае, aria-keyshortcuts не сработало для этого контекста).

1 Ответ

3 голосов
/ 14 октября 2019

Кроме того, чтобы установить правильное значение role=application, необходимо также сделать фокусировку canvas или div (tabindex=0) и эффективно сфокусировать ее (используя метод .focus()).

При этом программа чтения с экрана должна переключиться в режим фокусировки, в котором большинство ключей передаются в ваш сценарий.

Если это не так, нажмите insert + space (NVDA) или вставка + Z (челюсти). Конечно, в идеале вы должны дать эту инструкцию игроку.
В зависимости от настроек переключение между режимом фокусировки и просмотра может быть только ручным.

Будьте готовы к тому, что не сможете полностью обрабатывать определенные комбинации, такие как Alt + Tab , Ctrl + Tab , Alt + F4 , Ctrl + F4 , Ctrl + F5 , Alt + Влево / Вправо , некоторые Alt + буква и Ctrl + буква .
Даже если они могут быть обнаружены вашим сценарием, их поведение по умолчанию может небыть отмененным путем вызова event.preventDefault() в определенных браузерах и ОС. Например, Alt + Tab никогда не попадает в окна. Это удачно, иначе вы можете полностью запретить пользователю выходить из вашей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...