如何解决将 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 提供了一个由 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()
函数还在将设备返回给应用程序的过程中隐式打开设备。没有与此行为等效的行为。站点必须在这些方法返回的 open()
接口上显式调用 USBDevice
。
请注意,如果将此应用程序部署到托管环境中,则可以使用 WebUsbAllowDevicesForUrls 策略模拟 Chrome 应用程序权限模型。策略允许的设备将由 navigator.usb.getDevices()
返回,而无需先调用 navigator.usb.requestDevice()
并提示用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。