Gebruik WebUSB

De WebUSB API maakt niet-standaard USB-compatibele apparaten toegankelijk via het web. Deze pagina beschrijft aspecten van de API die specifiek zijn voor extensies. Raadpleeg MDN voor volledige details over de WebUSB API .

Beschikbaarheid in extensies

Chrome 118 of later.

Toestemmingen

Er zijn geen machtigingen voor het manifestbestand vereist; WebUSB activeert echter wel de machtigingsprocedure voor de gebruiker van de browser.

Manifest

Voor deze API zijn geen manifest-sleutels nodig.

Ondersteunende contexten

Deze API kan in vrijwel elke context worden gebruikt; de methode WebUSB.requestDevice() kan niet worden gebruikt in extension service workers. Zie de volgende sectie voor meer informatie.

Wanneer deze API wordt gebruikt in een service worker van een extensie, zorgt de verbindingssessie van het apparaat ervoor dat de service worker actief blijft.

verschillen tussen Chrome-extensies

Hoewel WebUSB beschikbaar is voor extension service workers, kan WebUSB.requestDevice() , die een promise retourneert die wordt opgelost met een USBDevice- instantie, niet worden aangeroepen vanuit een extension service worker. Om dit te omzeilen, roept u requestDevice() aan vanuit een extensiepagina die geen extension service worker is en stuurt u een bericht naar de extension service worker.

De volgende code volgt een typisch patroon door requestDevice() aan te roepen als onderdeel van een permissiestroom die een gebruikersactie vereist. Wanneer het apparaat is verkregen, wordt een bericht naar de service worker gestuurd, die het apparaat vervolgens kan ophalen met getDevices() .

popup.js:

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