Используйте веб-USB

API WebUSB предоставляет доступ к Интернету нестандартным устройствам, совместимым с универсальной последовательной шиной (USB). На этой странице описаны аспекты API, специфичные для расширений. Обратитесь к MDN для получения полной информации о WebUSB API .

Доступность в расширениях

Chrome 118 или новее.

Разрешения

Никаких разрешений для файла манифеста не требуется; однако WebUSB запускает поток разрешений пользователя браузера.

Манифест

Для этого API не требуются ключи манифеста.

Поддерживающие контексты

Этот API можно использовать практически в любом контексте; Метод WebUSB.requestDevice() нельзя использовать в рабочих службах расширений. Подробности смотрите в следующем разделе.

Когда этот API используется в работнике службы расширения, сеанс подключения устройств поддерживает работу работника службы.

Различия расширений Chrome

Хотя WebUSB доступен работникам службы расширения, WebUSB.requestDevice() , который возвращает обещание, которое разрешается с помощью экземпляра USBDevice , не может быть вызван в работнике службы расширения. Чтобы обойти эту проблему, вызовите requestDevice() со страницы расширения, отличной от работника службы расширения, и отправьте сообщение работнику службы расширения.

Следующий код следует типичному шаблону, вызывая requestDevice() как часть потока разрешений, требующего жеста пользователя. Когда устройство получено, оно отправляет сообщение сервисному работнику, который затем может получить устройство с помощью getDevices() .

всплывающее окно.js:

myButton.addEventListener("click", async () => {
  await navigator.usb.requestDevice({
    filters: [{ vendorId: 0x1234, productId: 0x5678 }],
  });
  chrome.runtime.sendMessage("newDevice");
});

сервис-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();
    }
  }
});