WebHID API 浏览器支持
发布于
WebHID API — WebHID API 允许网页应用通过 navigator.hid.requestDevice() 请求访问非标准的
人机接口设备(HID),并与其交换输入、输出和特性报文。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 89 | 高 | 来源 | — |
| Chrome (Android) | 不支持 | — | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 89 | 高 | 来源 | 2 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 3 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 45 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 6 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 78 |
| Samsung Internet | 不支持 | — | 高 | 来源 | 910 |
| WebView (Android) | 不支持 | — | 高 | 来源 | 1112 |
- browser-compat-data 未记录 Chrome Android 的支持。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- browser-compat-data 未记录 Samsung Internet 的支持。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- browser-compat-data 未记录 WebView Android 的支持。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
请求设备必须在用户手势内进行,filters 可将选择器限定为匹配指定 vendorId 的设备。
用户选择设备后,需要先打开设备,然后才能收发报文:
async function connectHidDevice() { const [device] = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x2341 }], }); await device.open(); return device;}如何在运行时检测
Section titled “如何在运行时检测”在提供该功能之前先检测 navigator.hid 是否存在,并为不支持的情况提供回退:
if ('hid' in navigator) { connectButton.hidden = false;} else { connectButton.hidden = true; fallbackNotice.textContent = '此浏览器无法在页面中访问 HID 设备。';}- 需要安全上下文——除了
localhost这类被视为可信的来源外,普通 HTTP 源不可用。 requestDevice()需要短暂的用户激活(点击或按键处理函数);缺少时返回的 Promise 会以SecurityErrorDOMException拒绝。requestDevice()返回的数组(而非单个设备)包含用户所选设备暴露出的各个 HID 接口——空数组意味着用户关闭了选择器而没有做出选择。- 设备必须先
open()才能发送报文;对尚未打开的设备调用sendReport()会以InvalidStateErrorDOMException拒绝。 - 根据 MDN browser-compat-data,Chrome for Android 及 Android WebView 均未实现该 API,
因此在这些环境中
'hid' in navigator为false,依赖 HID 的流程需要使用上面的 回退路径。
完整参考(安全上下文规则、连接/断开事件、报文处理)见 WebHID API。
另见通过串口实现相同流程的 Web Serial API。
← 返回兼容性浏览器。