Użyj WebHID

Urządzenie HID (ang. Human Interface Device) pobiera dane wejściowe od ludzi lub dostarcza je użytkownikom. Odnosi się również do protokołu HID – standardu dwukierunkowej komunikacji między hostem a urządzeniem, który ma na celu uproszczenie procedury instalacji.

Na tej stronie opisaliśmy aspekty interfejsu API, które są charakterystyczne dla rozszerzeń. Szczegółowe informacje o interfejsie WebHID API znajdziesz w MDN.

Przykładowa aplikacja na platformę WebHID znajdziesz w naszym repozytorium przykładów.

Dostępność w rozszerzeniach

Chrome w wersji 117 lub nowszej.

Uprawnienia

Żadne uprawnienia do pliku manifestu nie są wymagane, ale WebHID uruchamia przepływ uprawnień użytkownika w przeglądarce.

Plik manifestu

Ten interfejs API nie wymaga kluczy manifestu.

Konteksty pomocnicze

Tego interfejsu API można używać niemal w każdym kontekście. Metody WebHID.requestDevice() nie można używać w skryptach service worker rozszerzenia. Więcej informacji na ten temat można znaleźć w następnej sekcji.

Gdy ten interfejs API jest używany w skrypcie service worker rozszerzenia, sesja połączenia z urządzeniem podtrzymuje jego aktywność.

Różnice dotyczące rozszerzeń do Chrome

Chociaż protokół WebHID jest dostępny dla mechanizmów skryptu service worker rozszerzenia, nie można wywołać metody WebHID.requestDevice(), która zwraca obietnicę rozwiniętą za pomocą instancji HIDDevice, nie można jej wywołać w skrypcie usługi rozszerzenia. Aby obejść ten problem, wywołaj połączenie requestDevice() ze strony rozszerzenia innej niż skrypt service worker i wyślij do niego wiadomość.

Ten kod działa zgodnie ze standardowym wzorcem – wywołuje funkcję requestDevice() w ramach procesu przyznawania uprawnień, które wymaga gestu użytkownika. Po pobraniu urządzenie wysyła komunikat do skryptu service worker, który może pobrać urządzenie przy użyciu 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();
    }
  }
});