API WebUSB предоставляет доступ к сети для нестандартных устройств, совместимых с универсальной последовательной шиной (USB). На этой странице описаны аспекты API, характерные для расширений. Полную информацию об API WebUSB см. на MDN.
Доступность в расширениях
Chrome версии 118 или более поздней.
Разрешения
Для доступа к файлам манифеста не требуются разрешения; однако WebUSB запускает процесс получения разрешений от пользователя в браузере.
Манифест
Для этого API не требуются ключи манифеста.
Вспомогательные контексты
Этот API можно использовать практически в любом контексте; метод WebUSB.requestDevice() нельзя использовать в рабочих процессах служб расширений. Подробности см. в следующем разделе.
При использовании этого API в сервисном воркере расширения сессия подключения устройства поддерживает активность сервисного воркера.
Различия расширений Chrome
Хотя WebUSB доступен для обработчиков служб расширений, WebUSB.requestDevice() , возвращающий промис, который разрешается с экземпляром USBDevice , нельзя вызвать в обработчике службы расширений. Чтобы обойти это ограничение, вызовите requestDevice() со страницы расширения, отличной от обработчика службы расширений, и отправьте сообщение обработчику службы расширений.
Приведенный ниже код следует типичному шаблону, вызывая requestDevice() в рамках процесса управления разрешениями, требующего действия пользователя. После получения устройства он отправляет сообщение сервис-воркеру, который затем может получить доступ к устройству с помощью getDevices() .
popup.js:
myButton.addEventListener("click", async () => {
await navigator.usb.requestDevice({
filters: [{ vendorId: 0x1234, productId: 0x5678 }],
});
chrome.runtime.sendMessage("newDevice");
});
service-worker.js
chrome.runtime.onMessage.addListener(async (message) => {
if (message === "newDevice") {
const devices = await navigator.usb.getDevices();
for (const device of devices) {
// open device connection.
await device.open();
}
}
});