Que tenemos:
keydown event + preventDefault evita el evento de keypress de tecla (prueba: https://stackoverflow.com/a/57401334/9398364 )stopPropagation no ayuda en absolutoevent.key no imprimibles (que no podemos simplemente lanzar como valor Unicode usando event.key.codePointAt(0) )Lo que necesitamos:
Deshabilite la reacción predeterminada de las teclas del navegador (es decir, presione la tab en Chrome) sin una gran expresión de cambio
Detectar eventos keydown porque necesitamos shift , ctrl y otros eventos de teclas ( event.code importa)
Detectar eventos de keypress de tecla porque necesitamos ingresar caracteres Unicode ( event.key importa) sin evento input y sin verificar si es un carácter no imprimible (como shift y ctrl )
¿Cómo?
UPD: parece que event.key no Unicode tiene una longitud de> 1 (fuente: https://stackoverflow.com/a/70401792/9398364 ) ¿Hay alguna prueba?
Resuelto así:
window.addEventListener('keydown', function (event) { onKeyboard(event.code); if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) { const utf16Code = event.key.codePointAt(0); onKeyboardInput(utf16Code); } event.preventDefault(); }, false);