Użyj WebHID

Urządzenie HID (Human Interface Device) odbiera dane od użytkowników lub przekazuje je użytkownikom. Odnosi się też do protokołu HID, czyli standardu dwukierunkowej komunikacji między hostem a urządzeniem, który ma na celu uproszczenie procedury instalacji.

Na tej stronie opisujemy aspekty interfejsu API odnoszące się do rozszerzeń. Szczegółowe informacje o interfejsie WebHID API znajdziesz w MDN.

Przykładową aplikację do obsługi WebHID znajdziesz w repozytorium przykładów.

Dostępność w rozszerzeniach

Chrome 117 lub nowsza.

Uprawnienia

Nie są wymagane żadne uprawnienia pliku manifestu, ale WebHID uruchamia proces uzyskiwania przez użytkownika uprawnień w przeglądarce.

Plik manifestu

W przypadku tego interfejsu API nie są potrzebne żadne klucze manifestu.

Konteksty dodatkowe

Ten interfejs API może być używany w prawie każdym kontekście. Metody WebHID.requestDevice() nie można używać w workerach rozszerzenia. Więcej informacji na ten temat można znaleźć w następnej sekcji.

Gdy ten interfejs API jest używany w workerze usługi rozszerzenia, sesja połączenia z urządzeniami utrzymuje workera usługi w stanie aktywnym.

Różnice między rozszerzeniami do Chrome

Chociaż mechanizm WebHID jest dostępny dla mechanizmów Service Worker rozszerzenia, zwracający obietnicę rozwiązaną w przypadku instancji HIDDevice nie można wywołać w skrypcie service worker rozszerzenia.WebHID.requestDevice() Aby to obejść, wywołaj funkcję requestDevice() na stronie rozszerzenia innej niż skrypt service worker rozszerzenia i wyślij wiadomość do skryptu service worker rozszerzenia.

Poniższy kod jest zgodny z typowym wzorcem i wywołuje funkcję requestDevice() w ramach procesu uzyskiwania uprawnień wymagającego działania użytkownika. Po pobraniu urządzenia wysyła ono wiadomość do skryptu service worker, który może następnie pobrać urządzenie za pomocą getDevices().

popup.js:

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