Start · Sprachen · JavaScript · Referenz · USBDevice.vendorId

USBDevice.vendorId

Eigenschaft

Die schreibgeschützte Eigenschaft <code>vendorId</code> liefert die von usb.org offiziell vergebene 16-Bit-Hersteller-ID (VID) eines USB-Geräts.

seit JavaScript Chrome/Edge 61+, Opera 48+ (nicht in Firefox/Safar Kategorie: webapi

Signatur

USBDevice.vendorId

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

Typ
number
Beschreibung
Vorzeichenlose 16-Bit-Ganzzahl (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);
  }
});
Hersteller-ID: 9025 Hex: 0x2341

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)})`);
}
Arduino Leonardo (VID 0x2341, PID 0x8036)

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');
});
Verbunden: 0483:5740 → stm32-vcp

// 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 navigator prüfen.
  • Sicherer Kontext: Die API steht nur über HTTPS oder localhost zur Verfügung. In iframes muss die Permissions Policy usb sie erlauben.
  • Dezimal statt hexadezimal: Beim Vergleichen immer Hex-Literale wie 0x2341 nehmen. Ein Vergleich mit der Zeichenkette "2341" oder der Zahl 2341 schlä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.