正在将 Chrome USB 应用程序 API 迁移到 Web USB API

Migrating Chrome USB App API to Web USB API

我目前有 Chrome 应用程序的源代码,但由于该平台已被弃用,我需要将我的 API 迁移到渐进式 Web 应用程序。

由于我仍然希望在我的 Web 平台应用程序中支持 USB,因此建议我使用 Web USB API 来保留功能,但我似乎无法弄清楚以下的等效项以及如何实施它们:

chrome.usb.releaseInterface()
chrome.usb.closeDevice()
chrome.usb.claimInterface()
chrome.usb.findDevices()
chrome.usb.bulkTransfer()

(此外,我还发现有一个 USB Library for Node.JS 也可以类似地工作;这也是一个不错的选择吗?)

WebUSB API 提供了一个 USBDevice 接口,由 navigator.usb.getDevices()navigator.usb.requestDevice() 返回。此接口的方法等同于除上面列出的方法之一外的所有方法:

chrome.usb.releaseInterface() -> releaseInterface()
chrome.usb.closeDevice()      -> close()
chrome.usb.claimInterface()   -> claimInterface()
chrome.usb.bulkTransfer()     -> transferIn() or transferOut().

chrome.usb.findDevices() 替换起来比较复杂,首先需要解释 WebUSB API 和 chrome.usb API 权限模型之间的差异。 WebUSB API 不提供访问 USB 设备的安装时权限。站点必须调用 navigator.usb.requestDevice() 以请求用户访问新 USB 设备的权限。对于具有序列号权限的设备,系统会记住这些权限,因此您可以调用 navigator.usb.getDevices() 来获取当前已连接设备的列表,该站点之前已获得访问权限。这与 chrome.usb.getUserSelectedDevices() 函数的模型相同。 chrome.usb.findDevices() 函数还在将设备返回给应用程序的过程中隐式打开了这些设备。没有与此行为相同的行为。该站点必须在这些方法返回的 USBDevice 接口上显式调用 open()

请注意,如果将此应用程序部署到托管环境中,则 WebUsbAllowDevicesForUrls 策略可用于模仿 Chrome Apps 权限模型。策略允许的设备将由 navigator.usb.getDevices() 返回,无需先调用 navigator.usb.requestDevice() 并提示用户。