Usa WebHID

Un dispositivo HID (Human Interface Device) prende input o fornisce output alle persone. Si riferisce anche al protocollo HID, uno standard per la comunicazione bidirezionale tra un host e un dispositivo progettato per semplificare la procedura di installazione.

In questa pagina vengono descritti gli aspetti dell'API specifici delle estensioni. Per informazioni dettagliate su API WebHID, consulta la pagina MDN.

Puoi trovare un'app di esempio per WebHID nel nostro repository di esempi.

Disponibilità nelle estensioni

Chrome 117 o versioni successive.

Autorizzazioni

Non sono necessarie autorizzazioni per il file manifest; tuttavia, WebHID attiva il flusso di autorizzazioni utente del browser.

Manifest

Non sono necessarie chiavi manifest per questa API.

Contesti di supporto

Questa API può essere utilizzata in quasi tutti i contesti. Il metodo WebHID.requestDevice() non può essere utilizzato nei service worker dell'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 nelle estensioni di Chrome

Sebbene WebHID sia disponibile per i service worker dell'estensione, WebHID.requestDevice(), che restituisce una promessa che viene risolta con un'istanza HIDDevice, non può essere chiamato in un service worker dell'estensione. Per risolvere il problema, chiama requestDevice() da una pagina dell'estensione diversa dal service worker dell'estensione e invia un messaggio al service worker dell'estensione.

Il codice seguente segue un pattern tipico chiamando requestDevice() nell'ambito di un flusso di autorizzazioni che richiede un gesto dell'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.hid.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.hid.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});