Перенос Chrome USB App API в Web USB API

В настоящее время у меня есть исходный код для приложения Chrome, но поскольку платформа устарела, мне нужно перенести мой API в прогрессивное веб-приложение.

Поскольку мне по-прежнему нужна поддержка USB в моем приложении веб-платформы, мне было предложено использовать веб-API USB для сохраняют функциональность, но я не могу понять эквивалент для следующего и как их реализовать:

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

(Кроме того, я также обнаружил, что существует USB-библиотека для Node.JS, которая работает аналогичным образом; это тоже хорошая альтернатива?)


person rxm    schedule 08.02.2021    source источник


Ответы (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() также неявно открывала устройства в процессе их возврата приложению. Нет эквивалента этому поведению. Сайт должен явно вызывать open() для USBDevice интерфейсов, возвращаемых этими методами.

Обратите внимание: если это приложение развертывается в управляемой среде, WebUsbAllowDevicesForUrls можно использовать для имитации модели разрешений приложений Chrome. Устройства, разрешенные политикой, будут возвращены navigator.usb.getDevices() без необходимости сначала вызывать navigator.usb.requestDevice() и запрашивать у пользователя.

person Reilly Grant    schedule 09.02.2021