Я отправляю программно сгенерированные события клавиатуры в документ. Я надеялся, что текущий сфокусированный элемент ввода отобразит их, однако это не так. События генерируются из строки с помощью этой функции:
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, но может ли это быть проблемой?
Это невозможно сделать с веб-сайта программно. Как вы сказали, 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?)