Доступ к устройствам WebUSB: разрешения, интерфейсы и приватность
Отделяйте разрешение селектора WebUSB от готовности устройства, учитывайте защищённые интерфейсы и отключения и не помещайте USB-метаданные в обычные журналы.
BotBrowser Team
Нужна структурированная документация по теме Идентичность?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
Для нового разрешения WebUSB действие пользователя должно открыть селектор браузера; ранее разрешённое устройство позднее также может быть возвращено тому же origin. Ни один путь не доказывает готовность устройства. BotBrowser может проверить ветку возможностей страницы и запасной путь в подготовленном контексте браузера, но не предоставляет USB-устройство, не выдаёт доступ операционной системе и не доказывает ввод-вывод оборудования. Считайте открытие устройства, выбор конфигурации, захват интерфейса и завершение операции отдельными результатами и сохраняйте путь без USB.
TL;DR
requestDevice()- управляемый пользователем шаг разрешения, а не список ближайших устройств.- Разрешённое устройство может не открыться или не предоставить доступный для захвата интерфейс.
- WebUSB не открывает защищённые классы интерфейсов обычной веб-странице.
- По завершении освободите захваченные интерфейсы и закройте сессию; закрытие само по себе не отзывает разрешение.
- Храните результат задачи, а не серийные номера или долгую историю устройств.
Contents
- Выбирайте доступ в момент использования
- Разделяйте разрешение и готовность устройства
- Сохраняйте защиту интерфейсов
- Закрывайте жизненный цикл и сокращайте метаданные
- Классифицируйте ошибки таблицей решений
- Практический вывод
Выбирайте доступ в момент использования
WebUSB работает только в защищённых контекстах, а requestDevice() требует временной активации пользователя. Поместите запрос за именованную кнопку, объясняющую назначение устройства. Селектор позволяет выбрать подходящее устройство и выдаёт origin доступ; одной проверки возможности недостаточно. Браузер или политика разрешений также может запретить запрос в текущем документе.
navigator.usb.getDevices() возвращает ранее разрешённые origin устройства без нового селектора. Он не перечисляет все подключённые устройства. Используйте его лишь для ясной задачи возвращающегося пользователя и не считайте результат доказательством подключения. Не открывайте селектор при загрузке и не зацикливайте его после отказа. Отмена должна вернуть страницу без потери черновика; новый запрос допустим только после нового действия пользователя.
Связь разрешения не равна соединению: устройство может быть отключено, не иметь нужной конфигурации или не выполнить передачу. Отчитывайтесь о каждом этапе отдельно.
Разделяйте разрешение и готовность устройства
После выбора USBDevice.open() начинает сессию. Затем приложению может понадобиться выбрать конфигурацию и захватить интерфейс. Операции могут отклониться из-за отключения, отсутствующей конфигурации или интерфейса, который API не может захватить.
Если нужный интерфейс недоступен, остановите USB-путь и объясните, что устройство не поддерживается в этой среде. Не расширяйте доступ и не повторяйте выбор автоматически.
Руководство BotBrowser по Playwright описывает автоматизацию собственных сценариев. В явно подготовленном контексте тест проверяет ветку возможностей страницы, сообщение состояния и запасной путь. Это не предоставляет физическое устройство и не доказывает аппаратный ввод-вывод.
Сохраняйте защиту интерфейсов
Для обычных веб-страниц спецификация WebUSB блокирует защищённые классы интерфейсов: аудио, human-interface, массовое хранилище, hub, смарт-карта, видео и беспроводной контроллер. Специализированные правила изолированных веб-приложений здесь не рассматриваются. Устройство может быть выбрано, хотя нужный интерфейс останется недоступным.
Считайте защищённый интерфейс явной границей поддержки. Не просите отключать системные меры защиты и не выдавайте успешный выбор за одобрение всех функций составного устройства. Для интерфейса вне WebUSB используйте проверенный нативный или системный путь с отдельным согласием и договорённостью о поддержке.
Закрывайте жизненный цикл и сокращайте метаданные
Слушайте disconnect на navigator.usb, останавливайте зависимую работу и сохраняйте черновик. Попытайтесь освободить интерфейс и закрыть сессию как best-effort очистку, не обещая гарантированного физического освобождения. Повторное подключение должно требовать явного действия. По завершении доступной задачи освободите интерфейсы и закройте сессию.
Закрытие и забывание устройства различаются: close() завершает сессию и освобождает интерфейсы, а forget() удаляет разрешение страницы. Не говорите, что закрытие стерло разрешение; объясните кнопку забывания или настройки сайта.
После выдачи доступа USBDevice может открыть серийный номер, названия и идентификаторы производителя/продукта. Не записывайте их в аналитику, URL, аккаунты, скриншоты или обычные журналы. Предпочитайте selected, unsupported или disconnected; пользовательскую метку храните с понятными правилами удаления.
Классифицируйте ошибки таблицей решений
Классифицируйте первый неудачный этап и сохраняйте тот же путь без USB. Один timeout не объясняет причину.
| Наблюдаемый этап | Что он устанавливает | Следующее действие |
|---|---|---|
| Нет API, небезопасный контекст или ограничение политики | Страница не может начать запрос здесь | Сохранить задачу рабочей и объяснить ограничение среды |
| Селектор отклонён или закрыт | В этой попытке нет пригодного выбора | Сохранить черновик и ждать явного действия |
Отклонены open(), конфигурация или захват | Нет пригодной сессии или интерфейса | Остановить USB, показать поддерживаемый путь |
| Событие отключения | Активное соединение завершилось | Остановить операции, очистить, сохранить ввод и предложить осознанный повтор |
| Операция успешна | Страница увидела ожидаемый результат USB | Сообщить только его, не выводя загрузку или удалённое хранение |
Каждая строка должна вернуть страницу в понятное состояние, не открывая селектор автоматически и не сохраняя идентификаторы. BotBrowser проверяет такие состояния страницы в объявленном контексте, но не превращает их в доказательство реальной операции.
Проверки реализации и приватности
Отделяйте состояния страницы от разрешения, делайте асинхронную очистку идемпотентной и проверяйте отмену, отключение и неподдерживаемые интерфейсы как ожидаемые ветви. Проверяйте телеметрию в момент сбора, различайте close() и forget() и указывайте поддерживаемые браузер, класс устройства и операцию. BotBrowser может проверить эти состояния и запасной путь в явно настроенном контексте браузера, но не предоставляет оборудование и не доказывает физический ввод-вывод.
Итог: практический вывод
Используйте одно явное действие селектора, разделяйте разрешение, сессию и интерфейс и делайте очистку после отключения предсказуемой. До выпуска проверьте поддерживаемый, отклонённый или недоступный и отключённый сценарии в соответствующих средах. Обычная задача должна завершаться без USB.
FAQ
Означает ли разрешение селектора подключение устройства?
Нет. Оно может быть отключено, не открыться или не иметь доступного интерфейса.
Отзывает ли close() разрешение сайта?
Нет. Используйте forget() или настройки сайта браузера.
Нужно ли сохранять serialNumber?
Только при конкретной необходимости, понятной пользователю; это идентификатор физического экземпляра, а не стандартный идентификатор аналитики.
Что должна показать страница после ошибки?
Она должна назвать первый наблюдаемый этап отказа и сохранить рабочий путь задачи без USB.
Может ли BotBrowser проверить физическую операцию?
Он может проверить состояния страницы в подготовленном контексте, но не предоставляет устройство и не доказывает аппаратный ввод-вывод.
Sources
- Стандарт USB WHATWG:
requestDevice() - Стандарт USB WHATWG:
getDevices() - Стандарт USB WHATWG: список защищённых интерфейсов
- Стандарт USB WHATWG: политика разрешений
- Стандарт USB WHATWG: событие отключения
- Стандарт USB WHATWG:
close() - Стандарт USB WHATWG:
forget() - MDN: WebUSB API
- MDN: USBDevice
О связанных границах браузера см. политика разрешений и возможности браузера и приватность разрешений браузера.
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.