Start · Sprachen · JavaScript · Referenz · Gamepad.id

Gamepad.id

Eigenschaft

Schreibgeschützter String mit Informationen zum angeschlossenen Controller, meist Name sowie Hersteller- und Produkt-ID (USB Vendor/Product ID).

seit JavaScript Baseline: alle modernen Browser (Gamepad API) Kategorie: webapi

Signatur

Gamepad.id

Beschreibung

Die schreibgeschützte Eigenschaft Gamepad.id liefert einen String, der den angeschlossenen Controller beschreibt. Das Format ist nicht standardisiert. Browser nehmen aber in der Regel den Gerätenamen sowie die USB-Hersteller-ID (Vendor ID) und Produkt-ID (Product ID) auf, jeweils als vierstellige Hexadezimalzahl.

Typische Beispiele sind "Xbox 360 Controller (XInput STANDARD GAMEPAD)" in Chromium unter Windows, "045e-028e-Microsoft X-Box 360 pad" in Firefox oder "Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)" in Chrome für einen DualShock 4.

Die Eigenschaft eignet sich gut, um Controller in der Oberfläche anzuzeigen (z. B. „Spieler 1: Xbox-Controller“), passende Tastenbelegungen auszuwählen oder die richtigen Button-Grafiken einzublenden (PlayStation-Symbole oder Xbox-Buchstaben). Wer Controller zuverlässig unterscheiden will, sollte Vendor- und Product-ID per regulärem Ausdruck herausziehen, statt den ganzen String zu vergleichen.

Für die Tastenbelegung selbst ist meist Gamepad.mapping die bessere Wahl. Hat es den Wert "standard", entspricht die Belegung dem Standardlayout der Gamepad API, und zwar unabhängig vom konkreten Gerät.

Rückgabewert

Typ
string
Beschreibung
Beschreibender, browserabhängiger Bezeichner des Controllers, meist mit Gerätename sowie Hersteller- und Produkt-ID.

Beispiele

Controller beim Verbinden protokollieren

window.addEventListener('gamepadconnected', (event) => {
  const { index, id, buttons, axes } = event.gamepad;
  console.log(`Gamepad ${index} verbunden: ${id}`);
  console.log(`${buttons.length} Tasten, ${axes.length} Achsen`);
});
Gamepad 0 verbunden: Xbox 360 Controller (XInput STANDARD GAMEPAD) 17 Tasten, 4 Achsen

Vendor- und Product-ID browserübergreifend herausziehen

const parseGamepadId = (id) => {
  // Chromium: "... (Vendor: 054c Product: 09cc)"
  const chrome = id.match(/Vendor:\s*([0-9a-f]{4})\s*Product:\s*([0-9a-f]{4})/i);
  if (chrome) return { vendor: chrome[1].toLowerCase(), product: chrome[2].toLowerCase() };

  // Firefox: "054c-09cc-Wireless Controller"
  const firefox = id.match(/^([0-9a-f]{1,4})-([0-9a-f]{1,4})-/i);
  if (firefox) {
    return {
      vendor: firefox[1].padStart(4, '0').toLowerCase(),
      product: firefox[2].padStart(4, '0').toLowerCase()
    };
  }
  return null;
};

console.log(parseGamepadId('Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)'));
console.log(parseGamepadId('45e-28e-Microsoft X-Box 360 pad'));
{ vendor: '054c', product: '09cc' } { vendor: '045e', product: '028e' }

Passende Button-Symbole anhand des Herstellers wählen

const VENDORS = { '054c': 'playstation', '045e': 'xbox', '057e': 'nintendo' };

const getButtonStyle = (gamepad) => {
  const match = gamepad.id.match(/(?:Vendor:\s*|^)([0-9a-f]{3,4})/i);
  const vendor = match ? match[1].padStart(4, '0').toLowerCase() : '';
  return VENDORS[vendor] ?? 'generic';
};

const pollPads = () => {
  for (const pad of navigator.getGamepads()) {
    if (!pad) continue;
    console.log(`Spieler ${pad.index + 1}: ${getButtonStyle(pad)}`);
  }
};

window.addEventListener('gamepadconnected', pollPads);
Spieler 1: playstation

// Wichtig · Fallstricke

  • Kein einheitliches Format: Chromium, Firefox und Safari bauen den String unterschiedlich auf. Firefox lässt führende Nullen weg (45e statt 045e). Vergleiche also nie den ganzen String exakt, sondern werte ihn tolerant mit regulären Ausdrücken aus.
  • Derselbe Controller kann je nach Betriebssystem, Treiber (XInput oder DirectInput) und Verbindungsart (USB oder Bluetooth) unterschiedliche IDs liefern.
  • id ist nicht eindeutig: Zwei baugleiche Controller haben dieselbe ID. Zur Unterscheidung dient Gamepad.index.
  • Datenschutz: Die ID kann zum Browser-Fingerprinting beitragen. Deshalb gibt es Gamepad-Daten nur in sicheren Kontexten (HTTPS). Außerdem liefern Browser sie oft erst, nachdem der Nutzer eine Taste gedrückt hat. Eine Berechtigungsrichtlinie (Permissions-Policy: gamepad) kann den Zugriff ganz sperren.
  • Das Objekt aus gamepadconnected ist in Chromium eine Momentaufnahme. Aktuelle Zustände liefert navigator.getGamepads() in der Spielschleife.