L'API WebUSB espone al web i dispositivi compatibili con Universal Serial Bus (USB) non standard. Questa pagina descrive gli aspetti dell'API che sono specifici delle estensioni. Per informazioni dettagliate sull'API WebUSB, consulta MDN.
Disponibilità nelle estensioni
Chrome 118 o versioni successive.
Autorizzazioni
Non sono richieste autorizzazioni per il file manifest, tuttavia WebUSB attiva il flusso di autorizzazione dell'utente del browser.
Manifest
Per questa API non sono necessarie chiavi manifest.
Contesti supportati
Questa API può essere utilizzata in quasi tutti i contesti. Il metodo WebUSB.requestDevice() non può essere utilizzato nei service worker di estensione. Consulta la sezione seguente per ulteriori dettagli.
Quando questa API viene utilizzata in un service worker di estensione, la sessione di connessione dei dispositivi mantiene attivo il service worker.
Differenze tra le estensioni di Chrome
Sebbene WebUSB sia disponibile per i service worker di estensione, WebUSB.requestDevice(), che restituisce una promessa che viene risolta con un'istanza USBDevice, non può essere chiamata in un service worker di estensione. Per ovviare a questo problema, chiama requestDevice() da una pagina di estensione diversa dal service worker di estensione e invia un messaggio al service worker di estensione.
Il seguente codice segue un pattern tipico chiamando requestDevice() come parte di un flusso di autorizzazioni che richiede un'attivazione dall'utente. Quando il dispositivo viene acquisito, invia un messaggio al service worker, che può quindi recuperare il dispositivo utilizzando 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();
}
}
});