是否存在用于模拟元素键盘操作的跨浏览器JavaScript库?

是否存在用于模拟元素键盘操作的跨浏览器JavaScript库?,javascript,javascript-events,ui-automation,Javascript,Javascript Events,Ui Automation,我很清楚浏览器的标准事件触发机制,但我需要一个JavaScript库,它将通过键盘模拟光标和插入点导航。特别是,我需要一个库,它允许我移动插入点,但如果在使用虚拟箭头键导航时“按下”虚拟shift键,还可以处理文本选择范围的扩展或折叠。是否存在这样的跨浏览器JavaScript库 这是为了在浏览器自动化库中使用,因此建议使用Selenium之类的东西是不合适的。此外,如果可能的话,我希望避免依赖于jQuery等大型JavaScript框架的库。最后,这需要在页面中注入,因此非JavaScript

我很清楚浏览器的标准事件触发机制,但我需要一个JavaScript库,它将通过键盘模拟光标和插入点导航。特别是,我需要一个库,它允许我移动插入点,但如果在使用虚拟箭头键导航时“按下”虚拟shift键,还可以处理文本选择范围的扩展或折叠。是否存在这样的跨浏览器JavaScript库

这是为了在浏览器自动化库中使用,因此建议使用Selenium之类的东西是不合适的。此外,如果可能的话,我希望避免依赖于jQuery等大型JavaScript框架的库。最后,这需要在页面中注入,因此非JavaScript解决方案无法满足我的需求

假设我有一个如下所示的HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>keyboard</title>
</head>
<body>
  <input id="editor" value="hello world" />
</body>
</html>
function moveCursor() {
  var editor = document.getElementById("editor");
  editor.focus();

  // Hypothetical API here. This would need to be
  // adjusted to be used with the actual library.
  // Assume the pressKey() is defined as:
  //
  //   pressKey(element, keyCode, isShiftPressed)
  //
  keyboardSimulator.pressKey(editor, keys.END);
  keyboardSimulator.pressKey(editor, keys.LEFT, true);
  keyboardSimulator.pressKey(editor, keys.LEFT, true); 
}

调用此JavaScript函数后,我希望页面中的焦点在编辑器元素上,并在“hello world”值中选择“ld”。

不存在这样的库。如果真的允许,这将是一个巨大的安全漏洞。您唯一能做的就是捕捉击键并对其进行操作,例如创建特殊的热键,当捕捉到热键时会触发您在javascript中创建的一些特殊功能


(顺便说一句:有些扩展,如Lastpass和Lazarus,它们似乎向控件发送击键,实际上只是设置text属性。)

不存在这样的库。如果真的允许,这将是一个巨大的安全漏洞。您唯一能做的就是捕捉击键并对其进行操作,例如创建特殊的热键,当捕捉到热键时会触发您在javascript中创建的一些特殊功能

(顺便说一句:有些扩展,如Lastpass和Lazarus,它们似乎向控件发送击键,实际上只是设置了text属性。)

实际上有一些库可以执行这些操作

其中一个称为Syn,包含在bitovi FuncUnit中:

实际上,有些库可以做这些事情

其中一个称为Syn,包含在bitovi FuncUnit中:


然而,通过非常巧妙地操纵选择范围和设置文本属性,可以模拟这种行为。我想这不会造成安全风险。我希望有人已经做了腿部工作来处理边缘情况,以使这样的模拟更加健壮。嗯,这是一个有趣的角度。如果你遇到什么问题或自己想出一个解决方案,请让我知道。(一直在寻找一种新的自动化技术:)是的,我肯定会的。根据YUI上的这个页面,FireFox将很高兴地插入关键事件。我非常确定Bitovi Syn可能是目前最好的实用解决方案,但事实证明,它很难集成到我的Ember js应用程序中。然而,通过非常巧妙地操纵选择范围和设置文本属性,可以模拟这种行为。我想这不会造成安全风险。我希望有人已经做了腿部工作来处理边缘情况,以使这样的模拟更加健壮。嗯,这是一个有趣的角度。如果你遇到什么问题或自己想出一个解决方案,请让我知道。(一直在寻找一种新的自动化技术:)是的,我肯定会的。根据YUI上的这个页面,FireFox将很高兴地插入关键事件。我很确定Bitovi Syn可能是目前最好的实用解决方案,但事实证明,它很难集成到我的Ember js应用程序中。