Signatur
Beschreibung
Die Eigenschaft USBDevice.vendorId gehört zur WebUSB-API. Sie enthält die Hersteller-ID (Vendor ID, kurz VID), die das USB Implementers Forum (usb.org) einem Hersteller zuteilt. Der Wert stammt aus dem Feld idVendor des USB-Gerätedeskriptors und ist eine vorzeichenlose 16-Bit-Zahl von 0x0000 bis 0xFFFF.
Zusammen mit productId identifiziert vendorId ein bestimmtes Gerätemodell eindeutig. Typische Anwendungen sind:
- Filter für
navigator.usb.requestDevice(), damit im Auswahldialog nur passende Geräte erscheinen, - das Wiederfinden bereits freigegebener Geräte über
navigator.usb.getDevices(), - die Auswahl eines passenden Treibers oder Protokolls im eigenen Code, je nach Hersteller.
Der Wert wird als Dezimalzahl zurückgegeben. Hersteller-IDs stehen in Datenblättern und Tools wie lsusb aber meist hexadezimal (z. B. 2341 für Arduino). Zur Anzeige sollte man deshalb mit toString(16).padStart(4, "0") umrechnen.
Rückgabewert
0–65535) mit der von usb.org vergebenen Hersteller-ID. Schreibgeschützt.Beispiele
Gerät per Hersteller-ID anfordern
// Muss durch eine Benutzeraktion ausgelöst werden (z. B. Klick)
const button = document.querySelector('#verbinden');
button.addEventListener('click', async () => {
try {
const device = await navigator.usb.requestDevice({
filters: [{ vendorId: 0x2341 }] // Arduino
});
console.log(`Hersteller-ID: ${device.vendorId}`);
console.log(`Hex: 0x${device.vendorId.toString(16).padStart(4, '0')}`);
} catch (err) {
console.warn('Kein Gerät ausgewählt:', err.message);
}
});
Bereits freigegebene Geräte eines Herstellers finden
const findeGeraete = async (vendorId) => {
const devices = await navigator.usb.getDevices();
return devices.filter((d) => d.vendorId === vendorId);
};
const arduinos = await findeGeraete(0x2341);
for (const d of arduinos) {
console.log(`${d.productName} (VID 0x${d.vendorId.toString(16)}, PID 0x${d.productId.toString(16)})`);
}
Treiber anhand von VID/PID auswählen
const toHex = (n) => n.toString(16).padStart(4, '0');
const treiber = new Map([
['2341:8036', 'arduino-leonardo'],
['0483:5740', 'stm32-vcp']
]);
navigator.usb.addEventListener('connect', ({ device }) => {
const key = `${toHex(device.vendorId)}:${toHex(device.productId)}`;
console.log('Verbunden:', key, '→', treiber.get(key) ?? 'unbekannt');
});
// Wichtig · Fallstricke
- Browser-Kompatibilität: WebUSB gibt es nur in Chromium-Browsern (Chrome, Edge, Opera) auf dem Desktop und unter Android. Firefox und Safari unterstützen die API nicht. Vorher mit
'usb' in navigatorprüfen. - Sicherer Kontext: Die API steht nur über HTTPS oder
localhostzur Verfügung. In iframes muss die Permissions Policyusbsie erlauben. - Dezimal statt hexadezimal: Beim Vergleichen immer Hex-Literale wie
0x2341nehmen. Ein Vergleich mit der Zeichenkette"2341"oder der Zahl2341schlägt fehl. - Keine Echtheitsgarantie: Die VID meldet das Gerät selbst, sie lässt sich also fälschen. Für sicherheitskritische Prüfungen reicht sie allein nicht aus.
- Gesperrte Geräte: Einige Geräteklassen, etwa HID-Tastaturen oder Massenspeicher, und bestimmte VID/PID-Kombinationen blockiert der Browser. Sie erscheinen gar nicht erst im Auswahldialog.
- Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird still ignoriert, im Strict Mode gibt es einen
TypeError.