标准 · WCAG 2.2

SC 2.1.4 级别 A WCAG 2.1

字符键快捷键

仅由单个字母、数字或符号组成的键盘快捷键,必须支持关闭、重新映射,或仅在相关组件获得焦点时生效。此条准则旨在保护语音控制和听写用户,防止意外触发操作。

要求内容

若页面实现了仅使用字母、数字、标点或符号键——而不配合 Ctrl、Alt 或 Shift 等修饰键——的键盘快捷键,则以下条件至少须满足其一:

  • 该快捷键可在设置菜单中关闭;
  • 该快捷键可重新映射,改为使用一个或多个非打印键(Ctrl、Alt、Shift、功能键);
  • 该快捷键仅在相关组件获得焦点时生效。

本准则的设立主要是为了保护语音输入用户。Dragon NaturallySpeaking 和 Voice Control 均会将语音转录为字符按键——句中一个多余的”k”可能触发 Gmail、Slack 或任何使用单字母快捷键的应用中的破坏性操作。

如何满足

  • 审计代码库中所有单键处理程序:即检查 event.key 是否匹配可打印字符但未同时检查修饰键的 keydown / keypress 监听器。
  • 添加”键盘快捷键”设置面板,允许用户完全禁用快捷键。Gmail 和 Slack 在这方面均有良好实践。
  • 或:将快捷键作用域限定为仅在焦点位于相关区域时触发(例如,j/k 仅在焦点位于邮件列表内时用于导航,而非在用户于回复框中输入时也生效)。
  • 优先使用基于修饰键的快捷键(Ctrl+/、Alt+N)作为默认配置;将单键快捷键保留为面向高级用户的可选模式。

常见失败

  • Gmail 风格的 j / k / r / a 快捷键可在文档任意位置触发,包括在特定框架配置下的文本框内。
  • 自定义数据表格中 Delete 键无需确认即可删除行——对键盘用户尚可接受,但对语音用户而言极具风险,因为说出”delete that comma(删除那个逗号)“可能触发删除操作。
  • 视频播放器中空格键全局切换播放/暂停,而非仅在播放器获得焦点时生效。
  • 文档网站中 / 键触发搜索焦点,即使焦点当前位于代码编辑器嵌入区域中也不例外。

axe-core 无法检测此问题——需要进行源码审查,或使用 Deque 更广泛测试套件中的特定自动化规则。多数生产环境中的失败仅在语音控制用户提交投诉后才被发现。

为何重要

本成功准则于 WCAG 2.1 中新增,原因在于 2017 年后语音输入的使用迅速增长。对于依赖听写的用户而言,一个不符合 2.1.4 的网站可能完全无法使用:每个段落都会触发不同的操作。对于偶尔误触按键的运动障碍键盘用户,能够禁用单字符快捷键同样大有裨益。