WebHID verwenden

Ein Human Interface Device (HID) nimmt Eingaben von Menschen entgegen oder gibt eine Ausgabe an Menschen aus. Es bezieht sich auch auf das HID-Protokoll, einen Standard für die bidirektionale Kommunikation zwischen einem Host und einem Gerät, der den Installationsvorgang vereinfachen soll.

Auf dieser Seite werden Aspekte der API beschrieben, die speziell für Erweiterungen gelten. Ausführliche Informationen zur WebHID API finden Sie in der MDN.

Eine Beispiel-App für WebHID finden Sie in unserem Beispiel-Repository.

Verfügbarkeit in Erweiterungen

Chrome 117 oder höher

Berechtigungen

Es sind keine Berechtigungen für Manifestdateien erforderlich. WebHID löst jedoch den Ablauf für Nutzerberechtigungen des Browsers aus.

Manifest

Für diese API sind keine Manifestschlüssel erforderlich.

Unterstützte Kontexte

Diese API kann in fast jedem Kontext verwendet werden. Die Methode WebHID.requestDevice() kann nicht in Erweiterungs-Dienstworkern verwendet werden. Einzelheiten finden Sie im nächsten Abschnitt.

Wenn diese API in einem Erweiterungs-Dienst-Worker verwendet wird, hält die Geräteverbindungssitzung den Dienst-Worker aktiv.

Unterschiede zwischen Chrome-Erweiterungen

WebHID ist zwar für Erweiterungs-Service-Worker verfügbar, WebHID.requestDevice(), das ein Versprechen zurückgibt, das in eine HIDDevice-Instanz aufgelöst wird, kann jedoch nicht in einem Erweiterungs-Service-Worker aufgerufen werden. Um dieses Problem zu umgehen, rufen Sie requestDevice() von einer anderen Erweiterungsseite als dem Erweiterungs-Service-Worker auf und senden Sie eine Nachricht an den Erweiterungs-Service-Worker.

Der folgende Code folgt einem typischen Muster, indem requestDevice() als Teil eines Berechtigungsablaufs aufgerufen wird, der eine Nutzergeste erfordert. Wenn das Gerät gefunden wird, wird eine Nachricht an den Dienstarbeiter gesendet, der das Gerät dann mit getDevices() abrufen kann.

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();
    }
  }
});