Используйте WebHID

Устройство пользовательского интерфейса (HID) принимает входные данные или предоставляет выходные данные людям. Это также относится к протоколу HID, стандарту двунаправленной связи между хостом и устройством, предназначенному для упрощения процедуры установки.

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

Вы можете найти образец приложения для WebHID в нашем репозитории образцов.

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

Chrome 117 или новее.

Разрешения

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

Манифест

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

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

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

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

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

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

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

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

myButton.addEventListener("click", async () => {
  await navigator.hid.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.hid.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});