Посылка событий клавиатуры программно не отправляет их во входы

1

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

const simulateKeyPress = keys => {
  keys.split('').forEach(theKey => {
    const e = new window.KeyboardEvent('keypress', {
      bubbles: true,
      key: theKey,
      keyCode: theKey.charCodeAt(0),
      charCode: theKey.charCodeAt(0),
    })
    document.dispatchEvent(e)
  })
}

Если я добавлю EventListener в документ, он получит все события. Их флаг isTrusted установлен на false, но может ли это быть проблемой?

Теги:
input
keyboard-events

1 ответ

1
Лучший ответ

Это невозможно сделать с веб-сайта программно. Как вы сказали, isTrusted boolean как false не приведет к правильному isTrusted (с Chrome 53): https://developer.mozilla.org/en/docs/Web/API/Event/isTrusted

Я попытался решить эту проблему здесь: https://codepen.io/zvona/pen/LjNEyr?editors=1010

где практически единственная разница заключается в отправке события для activeElement, например: document.activeElement.dispatchEvent(e); , Кроме того, если вы можете подключаться к входным событиям, вы можете добавить прослушиватель событий для выполнения задания:

input.addEventListener('keypress', (evt) => {
  evt.target.value += evt.key;
});

Но, как уже упоминалось, это не доверенное событие. Однако это можно сделать с помощью расширений браузера (см.: Как инициализировать событие клавиатуры с заданным символом/ключевым кодом в расширении Chrome?)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню