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