Gebruik WebHID

Een Human Interface Device (HID) neemt input van of levert output aan mensen. Het verwijst ook naar het HID-protocol, een standaard voor bidirectionele communicatie tussen een host en een apparaat die is ontworpen om de installatieprocedure te vereenvoudigen.

Op deze pagina worden aspecten van de API beschreven die specifiek zijn voor extensies. Raadpleeg MDN voor volledige details van de WebHID API .

U kunt een voorbeeld-app voor WebHID vinden in onze voorbeeldrepository.

Beschikbaarheid in extensies

Chroom 117 of hoger.

Rechten

Er zijn geen manifestbestandsrechten vereist; WebHID activeert echter de gebruikerstoestemmingsstroom van de browser.

Manifest

Voor deze API zijn geen manifestsleutels nodig.

Ondersteunende contexten

Deze API kan in vrijwel elke context worden gebruikt. De methode WebHID.requestDevice() kan niet worden gebruikt in extensieservicewerknemers. Zie het volgende gedeelte voor meer informatie.

Wanneer deze API wordt gebruikt in een extensieservicemedewerker, houdt de verbindingssessie van het apparaat de servicemedewerker in leven.

Verschillen in Chrome-extensies

Hoewel WebHID beschikbaar is voor extensieservicemedewerkers, kan WebHID.requestDevice() , dat een belofte retourneert die wordt opgelost met een HIDDevice- instantie, niet worden aangeroepen in een extensieservicemedewerker. Om dit te omzeilen, roept u requestDevice() aan vanaf een andere extensiepagina dan de extensieservicemedewerker en stuurt u een bericht naar de extensieservicemedewerker.

De volgende code volgt een typisch patroon door requestDevice() aan te roepen als onderdeel van een machtigingenstroom waarvoor een gebruikersgebaar vereist is. Wanneer het apparaat wordt aangeschaft, wordt er een bericht naar de servicemedewerker gestuurd, die het apparaat vervolgens kan ophalen met behulp van getDevices() .

popup.js:

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

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