Назад к блогу
Идентичность

Доступ к устройствам WebUSB: разрешения, интерфейсы и приватность

Отделяйте разрешение селектора WebUSB от готовности устройства, учитывайте защищённые интерфейсы и отключения и не помещайте USB-метаданные в обычные журналы.

BotBrowser Team

Документация

Нужна структурированная документация по теме Идентичность?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Для нового разрешения WebUSB действие пользователя должно открыть селектор браузера; ранее разрешённое устройство позднее также может быть возвращено тому же origin. Ни один путь не доказывает готовность устройства. BotBrowser может проверить ветку возможностей страницы и запасной путь в подготовленном контексте браузера, но не предоставляет USB-устройство, не выдаёт доступ операционной системе и не доказывает ввод-вывод оборудования. Считайте открытие устройства, выбор конфигурации, захват интерфейса и завершение операции отдельными результатами и сохраняйте путь без 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

О связанных границах браузера см. политика разрешений и возможности браузера и приватность разрешений браузера.

#WebUSB#Доступ К Устройству#Разрешения#Приватность#API Браузера

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.