Gebruik WebUSB

De WebUSB API maakt niet-standaard Universal Serial Bus (USB)-compatibele apparaten toegankelijk voor internet. Op deze pagina worden aspecten van de API beschreven die specifiek zijn voor extensies. Raadpleeg MDN voor volledige details van de WebUSB API .

Beschikbaarheid in extensies

Chroom 118 of hoger.

Machtigingen

Er zijn geen manifestbestandsrechten vereist; WebUSB 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 WebUSB.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 WebUSB beschikbaar is voor extensieservicemedewerkers, kan WebUSB.requestDevice() , dat een belofte retourneert die wordt opgelost met een USBDevice- 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.usb.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.usb.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});