微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Chrome USB App API 迁移到 Web USB API

如何解决将 Chrome USB App API 迁移到 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 提供了一个由 USBDevicenavigator.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() 函数还在将设备返回给应用程序的过程中隐式打开设备。没有与此行为等效的行为。站点必须在这些方法返回的 open() 接口上显式调用 USBDevice

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。