Signatur
Beschreibung
Die Eigenschaft productName eines HIDDevice-Objekts enthält den Produktnamen, den das Gerät über seinen USB- bzw. Bluetooth-Produkt-String-Deskriptor meldet, z. B. "Joy-Con (L)" oder "USB Gaming Mouse". Sie ist schreibgeschützt und steht schon zur Verfügung, bevor das Gerät mit open() geöffnet wurde.
Am besten eignet sie sich für die Anzeige in der Oberfläche, etwa in einer Liste bereits freigegebener Geräte, in Statusmeldungen oder in Logs. Um ein Gerät eindeutig zu erkennen, sollte man dagegen vendorId und productId verwenden. Der Name ist ein frei wählbarer Text des Herstellers: Er kann bei verschiedenen Firmware-Versionen anders lauten, bei mehreren gleichen Geräten identisch sein oder ganz fehlen.
Ein HIDDevice erhält man über navigator.hid.requestDevice() (erfordert eine Nutzergeste), über navigator.hid.getDevices() für bereits erlaubte Geräte oder über die Events connect und disconnect.
Rückgabewert
"".Beispiele
Gerät auswählen und Namen anzeigen
const button = document.querySelector('#connect');
button.addEventListener('click', async () => {
// requestDevice erfordert eine Nutzergeste
const [device] = await navigator.hid.requestDevice({
filters: [{ vendorId: 0x057e }] // Nintendo
});
if (!device) return;
console.log(`Ausgewählt: ${device.productName}`);
});
Freigegebene Geräte mit Ersatznamen auflisten
const hex = (n) => n.toString(16).padStart(4, '0');
const listDevices = async () => {
const devices = await navigator.hid.getDevices();
return devices.map((d) =>
d.productName ||
`Unbekanntes Gerät (${hex(d.vendorId)}:${hex(d.productId)})`
);
};
listDevices().then(console.log);
Verbinden und Trennen protokollieren
navigator.hid.addEventListener('connect', ({ device }) => {
console.log(`Verbunden: ${device.productName}`);
});
navigator.hid.addEventListener('disconnect', ({ device }) => {
console.log(`Getrennt: ${device.productName}`);
});
// Wichtig · Fallstricke
- Kompatibilität: Die WebHID-API gibt es nur in Chromium-Desktop-Browsern (Chrome, Edge, Opera ab Version 89). Firefox und Safari unterstützen sie nicht. Prüfen Sie die Verfügbarkeit vorher mit
'hid' in navigator. - Die API steht nur in einem sicheren Kontext (HTTPS oder
localhost) zur Verfügung. In iframes wird sie nur mit der Permissions Policyhidfreigeschaltet. productNamekann ein leerer String sein. Planen Sie deshalb einen Ersatznamen ein, zum Beispiel ausvendorId/productId.- Der Name ist nicht eindeutig: Zwei gleiche Geräte liefern denselben Wert. Für die Zuordnung sollten Sie das
HIDDevice-Objekt selbst oder die IDs verwenden. - Der Text kommt vom Gerät. Fügen Sie ihn per
textContentund nicht perinnerHTMLins DOM ein, sonst droht XSS durch manipulierte Firmware.