Signatur
Beschreibung
Die schreibgeschützte Eigenschaft deviceClass des Interfaces USBDevice gibt den Klassen-Code des Geräts zurück, wie er im USB-Gerätedeskriptor im Feld bDeviceClass steht. Zusammen mit deviceSubclass und deviceProtocol beschreibt sie, zu welcher Geräteart ein Gerät gehört. Das Betriebssystem nutzt diese drei Werte, um einen passenden Treiber zu laden.
Die Klassen-Codes vergibt das USB Implementers Forum (USB-IF). Häufige Werte sind:
0x00: Die Klasse ist pro Interface festgelegt (sieheUSBInterface.alternate.interfaceClass).0x02: Kommunikation (CDC),0x09: Hub,0x0E: Video0xEF: Verschiedenes (Miscellaneous), oft bei Geräten mit mehreren Funktionen (Interface Association Descriptor)0xFF: herstellerspezifisch (Vendor Specific). Solche Geräte sind die typischen Ziele von WebUSB.
In der Praxis brauchen Sie deviceClass vor allem, um Geräte zu filtern, zu erkennen oder ihre Diagnosedaten anzuzeigen. Der Wert steht direkt nach navigator.usb.requestDevice() oder navigator.usb.getDevices() bereit. Sie müssen das Gerät dafür nicht öffnen (open()).
Rückgabewert
0 bis 255 (Oktett): der Klassen-Code aus dem Gerätedeskriptor (bDeviceClass).Beispiele
Geräteklasse nach Benutzerauswahl anzeigen
const button = document.querySelector('#connect');
button.addEventListener('click', async () => {
try {
// requestDevice muss durch eine Benutzeraktion ausgelöst werden
const device = await navigator.usb.requestDevice({ filters: [] });
const hex = device.deviceClass.toString(16).padStart(2, '0').toUpperCase();
console.log(`${device.productName}: Klasse 0x${hex}`);
} catch (err) {
console.warn('Keine Auswahl getroffen:', err.message);
}
});
Klassen-Code in lesbaren Namen übersetzen
const USB_CLASSES = {
0x00: 'Pro Interface definiert',
0x02: 'Kommunikation (CDC)',
0x09: 'Hub',
0x0E: 'Video',
0xDC: 'Diagnosegerät',
0xE0: 'Drahtlos-Controller',
0xEF: 'Verschiedenes',
0xFF: 'Herstellerspezifisch'
};
const describeClass = (device) =>
USB_CLASSES[device.deviceClass] ?? `Unbekannt (${device.deviceClass})`;
const devices = await navigator.usb.getDevices();
for (const d of devices) {
console.log(`${d.productName ?? 'Unbenannt'} → ${describeClass(d)}`);
}
Nur herstellerspezifische Geräte zur Auswahl anbieten und die Interface-Klasse prüfen
const device = await navigator.usb.requestDevice({
filters: [{ classCode: 0xFF }] // filtert auf Geräte- oder Interface-Klasse
});
if (device.deviceClass === 0x00) {
// Klasse steht erst in den Interfaces
const classes = device.configuration?.interfaces.map(
(i) => i.alternate.interfaceClass
) ?? [];
console.log('Interface-Klassen:', classes);
} else {
console.log('Geräteklasse:', device.deviceClass);
}
// Wichtig · Fallstricke
Wert 0 heißt nicht „unbekannt“: Viele Geräte setzen deviceClass auf 0x00 und legen die Klasse pro Interface fest. Werten Sie in diesem Fall device.configuration.interfaces[n].alternate.interfaceClass aus.
Geschützte Klassen: Chrome blockiert den Zugriff auf Interfaces bestimmter Klassen, etwa HID (0x03), Massenspeicher (0x08), Audio, Video und Smartcard. Dafür gibt es eigene APIs wie WebHID. Solche Geräte tauchen zwar mit ihrer deviceClass auf, lassen sich aber per claimInterface() nicht übernehmen.
Kompatibilität und Sicherheit: WebUSB gibt es nur in Chromium-basierten Browsern, dort nur in einem sicheren Kontext (HTTPS) und zusätzlich in Dedicated Workers. Firefox und Safari unterstützen WebUSB nicht. Prüfen Sie die Unterstützung vorher mit 'usb' in navigator. Per Permissions-Policy (usb) lässt sich die API in iframes sperren.
Den Wert können Sie nicht ändern: Ein Schreibzugriff wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus.