Быстрый фон:
- при нажатии клавиши в браузере генерируются три события: keyDown , keyPress и keyUp .
- keyDown и keyUp имеют свойство keyCode , которое приблизительно соответствует нажатой физической клавише.
- keyPress также имеет набор свойств charCode , который учитывает клавиши-модификаторы и раскладку клавиатуры (A и a имеют одинаковый keyCode, но другой charCode).
- все три события имеют свойства, которыеукажите, какие клавиши-модификаторы были нажаты во время этих событий.
Я являюсь основным noVNC разработчиком и у меня сложная проблема: noVNC требуется переведенный charCode значение без использования события keyPress по следующим причинам:
- noVNC необходимо отправлять события keyDown и keyUp отдельно на сервер VNC (в противном случае это не полностью функциональный клиент VNC).
- больше яВо-первых, noVNC должен предотвращать действия клавиатуры по умолчанию при подключении, что означает вызов метода protectDefault () события keyDown .У этого есть побочный эффект, также препятствующий запуску события keyPress .
Из-за различий в раскладках клавиатуры (т. Е. Разных сопоставлений клавиш и кодов), я определил, что noVNCпотребуется таблица поиска для различных раскладок клавиатуры.
Но здесь есть реальная проблема: на альтернативных раскладках, некоторые разные физические клавиши имеют код клавиши SAME .Например, при раскладке клавиатуры azerty (французский язык) клавиши подчеркивания '-' (тире) и '_' генерируют код клавиши 189. Ack !!!
Итак ... какполучить правильное сопоставление keyCode и charCode и одновременно предотвратить действия браузера по умолчанию?
Кстати, я подозреваю, что решение этой проблемы будет применимо к другим интерактивным веб-приложениям и играм HTML5, так как вы часто хотите иметь возможностьзнать полную информацию о нажатой клавише, не вызывая дополнительного ответа браузера на нажатие этой клавиши.
Полезные ссылки:
Решение : см. Мой рОст ниже.