【问题标题】:Migrating Chrome USB App API to Web USB API将 Chrome USB App API 迁移到 Web USB API
【发布时间】:2021-02-08 22:23:48
【问题描述】:

我目前有 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 也可以类似地工作;这也是一个不错的选择吗?)

【问题讨论】:

    标签: javascript node.js google-chrome-app libusb webusb


    【解决方案1】:

    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 应用程序权限模型。策略允许的设备将由navigator.usb.getDevices()返回,无需调用navigator.usb.requestDevice()并先提示用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2019-05-10
      相关资源
      最近更新 更多