Usa WebHID

Un Human Interface Device (HID) riceve input o fornisce output a persone fisiche. 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.

Questa pagina descrive aspetti dell'API specifici delle estensioni. Per informazioni dettagliate sull'API WebHID, consulta 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 worker di servizio delle estensioni. Consulta la sezione seguente per ulteriori dettagli.

Quando questa API viene utilizzata in un service worker di estensione, la sessione di connessione del dispositivo mantiene in vita il service worker.

Differenze tra le estensioni di Chrome

Sebbene WebHID sia disponibile per i service worker delle estensioni, WebHID.requestDevice(), che restituisce una promessa che si risolve 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 seguente codice segue uno schema 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 recuperarlo 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();
    }
  }
});