Javascript 以编程方式发送键盘事件不会';不要把它们分配到输入中

Javascript 以编程方式发送键盘事件不会';不要把它们分配到输入中,javascript,input,keyboard-events,Javascript,Input,Keyboard Events,我正在向文档发送以编程方式生成的键盘事件。我希望当前关注的输入元素能够显示它们,但事实并非如此。使用此函数从字符串生成事件: const simulateKeyPress = keys => { keys.split('').forEach(theKey => { const e = new window.KeyboardEvent('keypress', { bubbles: true, key: theKey, keyCode: t

我正在向文档发送以编程方式生成的键盘事件。我希望当前关注的输入元素能够显示它们,但事实并非如此。使用此函数从字符串生成事件:

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 as false不会正确触发按键(因为Chrome 53):

我试图在这里解决这个问题:

实际上唯一的区别是为
activeElement
调度事件,比如:
document.activeElement.dispatchEvent(e)。此外,如果能够钩住输入的事件,则可以添加事件侦听器来执行此任务:

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

但正如前面提到的,这不是可信事件。但是,这可以通过浏览器扩展来实现(请参阅:)

Hi,您是否碰巧有一些关于“不会正确触发按键(因为Chrome 53)”的参考资料。有什么声明吗?支持
isTrusted
属性真的意味着这一点吗?