Javascript JAWS/IE11中的按键按下事件未正确触发

Javascript JAWS/IE11中的按键按下事件未正确触发,javascript,accessibility,jaws-screen-reader,Javascript,Accessibility,Jaws Screen Reader,我们正在努力解决视频播放器的一些可访问性问题,其中之一是使用键盘擦洗视频的能力。我们有以下代码,它在按下键时暂停视频,向前/向后滚动视频,然后在按下键时在新点播放视频 问题在于,在IE11中,当按下按键时,keydown事件不会一直触发。它在keydown和keyup之间来回移动。结果是一个无休止的循环,向前移动一秒钟,然后回到视频中的原始点并播放 这是我们目前正在使用的代码,我们可以做些什么来让JAWS工作吗 document.addEventListener("keydown", funct

我们正在努力解决视频播放器的一些可访问性问题,其中之一是使用键盘擦洗视频的能力。我们有以下代码,它在按下键时暂停视频,向前/向后滚动视频,然后在按下键时在新点播放视频

问题在于,在IE11中,当按下按键时,keydown事件不会一直触发。它在keydown和keyup之间来回移动。结果是一个无休止的循环,向前移动一秒钟,然后回到视频中的原始点并播放

这是我们目前正在使用的代码,我们可以做些什么来让JAWS工作吗

document.addEventListener("keydown", function(ev) {
      if (ev.keyCode === 37 || ev.keyCode === 39) {
        console.log("keydown");
      }
    });

document.addEventListener("keyup", function(ev) {
      if (ev.keyCode === 37 || ev.keyCode === 39) {
      console.log("keyup");
    });

很高兴添加您可能需要的任何其他信息或回答任何问题,只需让我知道

您遇到的问题与JAWs如何拦截按键和使用虚拟光标有关

当按下左键和右键时,它试图说出上一个和下一个字符,因此它会截取按键,执行操作并将左箭头键传递给浏览器一次,因为它处于“文档浏览模式”

停止这种行为的一种方法是使用role=application,这会向屏幕阅读器发出信号,让其正常地将所有信息传递给浏览器

显然,您需要阅读有关role=application的所有文档,因为如果不小心,您可能会引入可访问性问题,而不是修复它们

相关W3指南 当用户导航分配了应用程序角色的元素时,通常拦截标准键盘事件的辅助技术应切换到应用程序浏览模式,并将键盘事件传递给web应用程序。目的是提示某些辅助技术从正常浏览模式切换到更适合与web应用程序交互的模式;一些用户代理具有浏览导航模式,其中键(如向上和向下箭头)用于浏览文档,并且这种本机行为防止web应用程序使用这些键


你能试试这个吗?在按住左箭头或右箭头之前,请按insert+3。现在能用了吗?如果是,则没有解决方案。请告诉我这个测试的结果,这样我可以发布一个更完整的答案,并解释为什么。@QuentinC这不起作用,你还有什么想让我试试的吗?没有,我还没有其他想法。你能发一个链接到你的页面吗?我自己试试会更容易。@QuentinC由于公司政策的原因,我无法在这里放置指向该页面的链接,但确实简化了代码,以便可以将其粘贴到IE11的控制台中。那对你有用吗?我真的很感谢你的帮助,如果还有什么我能做的,请告诉我,我很高兴在我的安全策略中尽我所能。你不能在jsfeedle这样的平台上发布一个简化版本吗?视频或音频可能并不重要。同时,您仍然可以尝试这样做:您能告诉我们keydown和keydup事件之间经过了多少时间吗?我怀疑这几乎是瞬间发生的。