Start · Sprachen · JavaScript · Referenz · HIDDevice.productId

HIDDevice.productId

Eigenschaft

Schreibgeschützte Eigenschaft, die die 16-Bit-Produkt-ID (PID) des verbundenen HID-Geräts als Zahl liefert.

seit JavaScript Chromium 89+ (Chrome, Edge, Opera); nicht in Firef Kategorie: webapi

Signatur

HIDDevice.productId

Beschreibung

Die Eigenschaft productId eines HIDDevice-Objekts enthält die Produkt-ID, die der Hersteller dem Gerät zugewiesen hat. Bei USB-Geräten ist das die idProduct aus dem Gerätedeskriptor, bei Bluetooth-HID-Geräten der entsprechende Wert aus dem Device-ID-Profil. Der Wert ist eine ganze Zahl zwischen 0 und 0xFFFF.

Zusammen mit vendorId kennzeichnet productId ein bestimmtes Gerätemodell eindeutig. Typische Anwendungsfälle sind das Filtern in navigator.hid.requestDevice(), die Erkennung bereits freigegebener Geräte über navigator.hid.getDevices() und die Auswahl des richtigen Protokolls, wenn eine Anwendung mehrere Modelle eines Herstellers unterstützt.

Die Eigenschaft ist schreibgeschützt und schon verfügbar, bevor das Gerät mit open() geöffnet wurde. Eine einzelne Produkt-ID steht für ein Modell, nicht für ein einzelnes Exemplar — für die Unterscheidung mehrerer gleicher Geräte ist sie also nicht geeignet.

Rückgabewert

Typ
number
Beschreibung
Vorzeichenlose 16-Bit-Ganzzahl (0–65535) mit der Produkt-ID des Geräts. Hexadezimal dargestellt z. B. 0x05c4.

Beispiele

Gerät auswählen und Produkt-ID ausgeben

// Muss in einer Nutzeraktion (z. B. Klick) aufgerufen werden
const button = document.querySelector('#connect');

button.addEventListener('click', async () => {
  const [device] = await navigator.hid.requestDevice({
    filters: [{ vendorId: 0x054c }] // Sony
  });
  if (!device) return;

  const hex = device.productId.toString(16).padStart(4, '0');
  console.log(`${device.productName}: PID 0x${hex}`);
});
Wireless Controller: PID 0x05c4

Gezielt nach Vendor- und Produkt-ID filtern

const DUALSHOCK4 = { vendorId: 0x054c, productId: 0x05c4 };

document.querySelector('#pair').addEventListener('click', async () => {
  const devices = await navigator.hid.requestDevice({ filters: [DUALSHOCK4] });
  console.log(`${devices.length} passende(s) Gerät(e) gewählt`);
});
1 passende(s) Gerät(e) gewählt

Freigegebene Geräte beim Start wiedererkennen

const SUPPORTED = new Map([
  ['054c:05c4', 'DualShock 4 (v1)'],
  ['054c:09cc', 'DualShock 4 (v2)'],
  ['054c:0ce6', 'DualSense']
]);

const key = (d) =>
  `${d.vendorId.toString(16).padStart(4, '0')}:${d.productId.toString(16).padStart(4, '0')}`;

const devices = await navigator.hid.getDevices();
for (const device of devices) {
  const model = SUPPORTED.get(key(device)) ?? 'unbekanntes Modell';
  console.log(`${key(device)} → ${model}`);
}
054c:0ce6 → DualSense

Auf neu angeschlossene Geräte reagieren

navigator.hid.addEventListener('connect', ({ device }) => {
  if (device.vendorId === 0x054c && device.productId === 0x0ce6) {
    console.log('DualSense verbunden');
  }
});
DualSense verbunden

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die WebHID-API gibt es nur in Chromium-basierten Desktop-Browsern (Chrome, Edge, Opera ab Version 89). Firefox und Safari unterstützen sie nicht. Prüfe die Verfügbarkeit vorher mit 'hid' in navigator.
  • Die API funktioniert nur in einem sicheren Kontext (HTTPS oder localhost). In iframes muss die Permissions-Policy hid erlaubt sein.
  • Der Wert ist eine Dezimalzahl. Datenblätter und Tools wie lsusb geben IDs meist hexadezimal an – vergleiche deshalb mit Hex-Literalen (0x05c4) oder formatiere über toString(16).padStart(4, '0').
  • Ein Hersteller kann für Hardware-Revisionen unterschiedliche Produkt-IDs vergeben (z. B. DualShock 4 v1/v2). Pflege daher lieber eine Liste unterstützter IDs, statt nur auf einen Wert zu prüfen.
  • Die Produkt-ID ist kein eindeutiger Geräte-Bezeichner: Mehrere identische Geräte haben dieselbe ID. Ein zusammengesetztes Gerät kann außerdem als mehrere HIDDevice-Objekte mit gleicher productId auftauchen, eines pro HID-Schnittstelle. Diese unterscheidest du über collections.
  • Bestimmte Geräteklassen (z. B. Tastaturen, FIDO-Sicherheitsschlüssel) blockiert der Browser. Sie tauchen unabhängig von der Produkt-ID nicht in der Auswahl auf.