键盘 API

实验性: 这是一项实验性技术
在生产环境中使用此功能之前,请仔细查看浏览器兼容性表

键盘 API 提供了用于处理连接到运行浏览器的设备上的物理键盘的方法。

它提供了多种功能。键盘映射提供了一个接口,用于检索键盘上特定物理键生成的字符串,以便正确地向用户识别该键。键盘锁定使网页能够捕获通常由用户代理或底层操作系统保留的键。键盘 API 的预期用途是 Web 应用程序,例如游戏或提供全屏沉浸式体验的远程访问应用程序。

概念和用法

键盘映射

在物理键盘上,code 属性包含按下键的物理位置,key 属性包含在键盘该物理位置按下键时生成的字符串。key 值考虑了键盘的区域设置(例如,“en-US”)、布局(例如,“QWERTY”)和修饰键状态(ShiftControl 等)。历史上一直没有办法检索这些信息。

键盘映射 API 提供了一种方法来检索特定按键生成的字符串,方法是通过Keyboard 接口和KeyboardLayoutMap 接口。可以通过navigator.keyboard 访问Keyboard 接口。Keyboard 提供了Keyboard.getLayoutMap 方法,该方法返回一个 Promise,该 Promise 解析为一个KeyboardLayoutMap 对象,其中包含用于将代码转换为键的成员。有效代码值的列表可以在书写系统键部分的UI 事件 KeyboardEvent 代码值规范中找到。

以下示例演示了如何获取与英文 QWERTY 键盘上标有W的键关联的位置特定或布局特定字符串。

js
if (navigator.keyboard) {
  const keyboard = navigator.keyboard;
  keyboard.getLayoutMap().then((keyboardLayoutMap) => {
    const upKey = keyboardLayoutMap.get("KeyW");
    window.alert(`Press ${upKey} to move up.`);
  });
} else {
  // Do something else.
}

键盘锁定

丰富的交互式网页、游戏和远程流媒体体验通常需要在全屏模式下访问特殊键和键盘快捷键。此类键/键组合的示例包括EscapeAlt+TabCtrl+N。这些键和键组合通常由用户代理或底层操作系统捕获,如下例所示。

要捕获WASD 键,请使用包含每个键的键代码属性值的列表调用 lock()

js
navigator.keyboard.lock(["KeyW", "KeyA", "KeyS", "KeyD"]);

这会捕获这些键,无论与按键一起使用哪些修饰符。假设标准的美国 QWERTY 布局,注册 KeyW 可确保WShift+WControl+WControl+Shift+W 以及所有其他带有W 的键修饰符组合都发送到应用程序。KeyAKeySKeyD 同理。

书写系统键

传递给Keyboard.lockKeyboardLayoutMap 接口的各种方法的代码称为“书写系统键”。

“书写系统键”在书写系统键部分的UI 事件 KeyboardEvent 代码值规范中进行了定义,因为物理键的含义会根据当前区域设置和键盘布局而改变。这些键如下所示。蓝色键存在于所有标准键盘上,而绿色键仅在某些键盘上可用。

Writing system keys as defined by the UI Events KeyboardEvent code Values spec.

接口

Keyboard 实验性

提供检索键盘布局映射和切换从物理键盘捕获按键的功能。

KeyboardLayoutMap 实验性

一个类似于映射的对象,其中包含用于检索与特定物理键关联的字符串的功能。

对其他接口的扩展

返回一个Keyboard 对象,该对象提供了访问检索键盘布局映射和切换从物理键盘捕获按键的功能。

规范

规范
键盘锁定
键盘映射

浏览器兼容性

api.Keyboard

BCD 表仅在启用 JavaScript 的浏览器中加载。

api.KeyboardLayoutMap

BCD 表仅在启用 JavaScript 的浏览器中加载。