javascript - 如何让屏幕阅读器停止将 HTML5 游戏视为文档?

标签 javascript html5-canvas accessibility wai-aria game-development

我正在开发一款 HTML5 游戏,该游戏完全在占据整个页面的 Canvas 元素中进行。我正在使用NV Access测试它如何与屏幕阅读器配合使用。通过使用带有 role="alert" 的隐藏 div(我用 JavaScript 更新),我可以让屏幕阅读器读取文本。

但是,NV Access 已经为几乎每个键盘按键提供了键盘命令,因此当我尝试使用 WASD、箭头键或几乎任何非游戏 Controller 的东西控制游戏时,它会拦截我的按键在游戏处理它们之前按下。

我在单独的测试中在页面主体和 Canvas 上设置了 role="application" ,但两个位置似乎都没有改变任何内容。

我可以让 NV Access 控制浏览器选项卡的唯一上下文是通过向页面添加一个隐藏文本框并专注于该文本框,这种方法有效,但具有让屏幕阅读器读取每个键的副作用按下,这导致 Angular 色移动时总是伴随着“s. s. sssssssssss. d. d. dddddddddd”的声音。

这基本上就是游戏页面的样子:

<body role="application">
    <div>
       <div id="screenRead" role="alert"></div>
       <canvas id="background"></canvas>
       <canvas id="foreground"></canvas>
    </div>
</body>

理想情况下,所有按键(禁止 Alt+Tab、Ctrl+Tab 等控制操作)都会被浏览器选项卡本身接受,而不是被屏幕阅读器捕获。由于播放器控件是可配置的,因此为某些按键添加异常(exception)将不起作用(并且 aria-keyshortcuts 无论如何都不适用于此上下文)。

最佳答案

此外,要设置正确的 role=application,您还必须使 canvasdiv 可聚焦(tabindex =0)并有效地对其进行聚焦(使用 .focus() 方法)。

这样做时,屏幕阅读器应切换到焦点模式,在该模式下,大多数键都会传递给您的脚本。

如果不是这种情况,请按 insert+space (NVDA) 或 insert+Z (Jaws)。当然,理想情况下您应该向玩家提供此指示。
根据设置,焦点和浏览模式之间的切换可能只能手动进行。

做好无法完全处理某些组合的准备,例如 Alt+TabCtrl+TabAlt+F4 Ctrl+F4Ctrl+F5Alt+左/右、一些 Alt+字母Ctrl+字母
即使它们可能被您的脚本捕获,但在某些浏览器和操作系统中调用 event.preventDefault() 可能无法取消它们的默认行为。 例如,Alt+Tab 永远不会在 Windows 上捕获。这是幸运的,否则您可以完全阻止用户退出您的页面。

关于javascript - 如何让屏幕阅读器停止将 HTML5 游戏视为文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368101/

相关文章:

javascript - fabric.js - toDataURL 在 Canvas 上有图像时显示空白页

javascript - 如何使用 RequireJS r.js 构建更改 i18n 的路径

javascript - 为什么 $.load( handler(eventObject) ) 对 Ajax 请求后从服务器返回的数据不起作用,试图让它等待所有图像加载

javascript - 在 ngShow 上隐藏/显示动画

forms - WCAG 合规表格 - 是否需要取消按钮

objective-c - VoiceOver:在屏幕转换后强制选择辅助功能元素

Flash 和可访问性

javascript - 使用 React 播放音频

HTML5 Canvas - 二维线框球体

javascript - HTML5 Canvas 设置顶部/左侧