Использование JAWS для получения ключевых событий

Мне нужно фиксировать текущее время каждый раз, когда в браузере нажимается пробел при использовании программы чтения с экрана JAWS. Я могу захватить пробел, если я не использую JAWS, однако система не может захватить пробел, когда JAWS включен.

Вот мой код:

$(document).keypress(function(event) {
        var chCode = ('charCode' in event) ? event.charCode : event.keyCode;
        if (chCode == 32){ //32 is keyCode for spacebar
    addTime = addTime + Number(new Date()) + ",";
    var x = document.getElementById("spacebar");
    alert("spacebars!!!");
    }
});

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

Достаточно забавно, что каждый раз, когда нажимается пробел, JAWS считывает «пробел», но событие не фиксируется на уровне кода.

ИЛИ - Поскольку JAWS считывает «Пробел», когда я нажимаю пробел, кто-нибудь знает, как я могу захватить событие JAWS? Поскольку он распознает это, когда я нажимаю пробел, мне интересно, могу ли я захватить событие непосредственно из JAWS. Есть предположения?


person bdfios    schedule 14.04.2014    source источник
comment
возможный дубликат Javascript keyevent и средства чтения с экрана JAWS   -  person Ryan B    schedule 15.04.2014


Ответы (1)


Это происходит потому, что большинство программ чтения с экрана, а именно JAWS, предоставляют в браузерах так называемый виртуальный курсор. Это необходимо для быстрой навигации по веб-страницам и подобным документам.
Чтобы проверить это, попробуйте нажать букву на веб-странице при включенной JAWS. Например, если вы нажмете b, JAWS скажет «Нет кнопок», потому что b переходит к следующей кнопке (если есть). Чтобы ввести текст, вам нужно войти в режим форм.
Пробел, с другой стороны, работает только тогда, когда вы находитесь на кликабельном элементе (ссылка, кнопка, флажок или просто элемент с присоединенным событием onClick), затем активирует элемент; или в режиме форм, затем он вводит пробел в поле редактирования.
Чтобы выполнить то, что вы хотите сделать, вам нужно объявить часть вашей веб-страницы как role="application" (подробнее об этом здесь):

Когда пользователь перемещается по элементу, которому назначена роль приложения, вспомогательные технологии, которые обычно перехватывают стандартные события клавиатуры, ДОЛЖНЫ переключаться в режим просмотра приложений и передавать события клавиатуры в веб-приложение.
Цель состоит в том, чтобы намекнуть на определенные вспомогательные технологии. для переключения из обычного режима просмотра в режим, более подходящий для взаимодействия с веб-приложением; некоторые пользовательские агенты имеют режим навигации просмотра, в котором клавиши, такие как стрелки вверх и вниз, используются для просмотра документа, и это собственное поведение предотвращает использование этих клавиш веб-приложением.

Итак, чтобы иметь возможность считать свое время, просто объявите родителя div как role="application", и ваш пробел будет передан непосредственно в приложение и не будет перехвачен JAWS.

person Andre Polykanine    schedule 14.04.2014
comment
Большое спасибо. Это очень познавательно. Вот контекст, в котором я это использую: я разработал звуковую капчу с элементами управления, размещенными на странице формы. Пользователи нажимают кнопку воспроизведения, и начинается аудиовызов. Пользователи отвечают на вызов, нажимая пробел. Когда я не использую JAWS, все работает нормально даже с Mac VoiceOver и Windows Narrator. Однако после запуска JAWS я больше не могу фиксировать текущее время при нажатии пробела. Ваше объяснение помогает. Теперь я попытался добавить role=application в тег body, но не работал. Где (какой тег) я могу разместить роль = приложение? - person bdfios; 15.04.2014
comment
Я попытался разместить role=application в теге body, а также в другом теге на странице, но ни один из них не работал у меня. - person bdfios; 15.04.2014
comment
Я добавил role=application в тег, содержащий элемент управления плеером, но это тоже не сработало. - person bdfios; 15.04.2014
comment
Вы добавляете роль приложения в теги div или p и т.п. (article, section, aside и т. д.). Не добавляйте эту роль в тег body, потому что в этом случае ваш пользователь не сможет нормально перемещаться по странице. - person Andre Polykanine; 15.04.2014