Un appareil d'interface homme-machine (HID) reçoit des entrées ou fournit des sorties à des utilisateurs. Il fait également référence au protocole HID, une norme de communication bidirectionnelle entre un hôte et un appareil conçue pour simplifier la procédure d'installation.
Cette page décrit les aspects de l'API propres aux extensions. Pour en savoir plus sur l'API WebHID, consultez MDN.
Vous trouverez une application exemple pour WebHID dans notre dépôt d'exemples.
Disponibilité dans les extensions
Chrome 117 ou version ultérieure
Autorisations
Aucune autorisation de fichier manifeste n'est requise. Toutefois, WebHID déclenche le flux d'autorisation de l'utilisateur du navigateur.
Fichier manifeste
Aucune clé de fichier manifeste n'est requise pour cette API.
Contextes compatibles
Cette API peut être utilisée dans presque tous les contextes. La méthode WebHID.requestDevice()
ne peut pas être utilisée dans les workers de service d'extension. Reportez-vous à la section suivante pour plus d'informations.
Lorsque cette API est utilisée dans un service worker d'extension, la session de connexion des appareils maintient le service worker actif.
Différences entre les extensions Chrome
Bien que WebHID soit disponible pour les service workers d'extensions, WebHID.requestDevice()
, qui renvoie une promesse résolue par une instance HIDDevice, ne peut pas être appelé dans un service worker d'extension. Pour contourner ce problème, appelez requestDevice()
à partir d'une page d'extension autre que le service worker de l'extension et envoyez un message au service worker de l'extension.
Le code suivant suit un modèle typique en appelant requestDevice()
dans le cadre d'un flux d'autorisations nécessitant un geste utilisateur. Lorsque l'appareil est acquis, il envoie un message au service worker, qui peut ensuite le récupérer à l'aide de 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();
}
}
});