SO FUNKTIONIERT ES

Wie JoyCheck deinen Controller ausliest

JoyCheck ist ein browserbasierter Controller-Tester, der deinen Controller über die W3C Gamepad API ausliest, ohne Installation und ohne dass etwas an einen Server gesendet wird. Live-Datenflussdiagramm plus Codebeispiele weiter unten.

Ein Controller ist per Kabel mit einem Laptop verbunden, auf dem JoyCheck läuft

JoyCheck ist ein browserbasierter Controller-Tester, der deinen Controller über die W3C Gamepad API ausliest, ohne Installation und ohne dass etwas an einen Server gesendet wird.

6 Eingabearten · 4 Abschnitte · 10 Min. Lesezeit

JoyCheck liest deinen Controller mit der W3C Gamepad API[1], einer browser-nativen Schnittstelle, die jede Taste, jede Analogachse und jeden Trigger als numerische Werte ausgibt, 60 Mal pro Sekunde aktualisiert. Der Browser übernimmt den USB- oder Bluetooth-Handshake; JoyCheck fragt navigator.getGamepads() bei jedem Animationsframe ab und rendert den Live-Zustand, ohne Daten an einen Server zu senden.

◆ VERIFIZIERT

Die W3C-Gamepad-API-Spezifikation definiert normalisierte Analogbereiche von -1.0 bis +1.0 und macht jeden verbundenen Controller über navigator.getGamepads() für jeden modernen Browser zugänglich[1]. JoyCheck liest exakt dieselben Daten, die dein Browser jeder anderen Web-App zugänglich machen würde, ohne Installer, Treiber oder Telemetrie-Schicht dazwischen.

Quelle: W3C-Gamepad-API-Spezifikation

Aktualisiert am 2026-05-27 von Taimoor Bamazai, Gründer der Elites Algorithm Limited (ein eingetragenes Technologieunternehmen in Dublin, Irland) und der Entwickler hinter JoyCheck.

Das Wichtigste in Kürze

  • JoyCheck liest Controller über die W3C Gamepad API, dieselbe browser-native Schnittstelle, die jedes moderne Spiel nutzt.
  • Der Browser tastet Controller im Takt der Animationsframes ab: 60 Hz an normalen Displays, 120 bis 144 Hz an solchen mit hoher Bildwiederholrate.
  • Die Gamepad API verlangt eine Nutzeraktion, bevor sie Controller freigibt, deshalb musst du eine Taste drücken, um die Seite zu wecken.
  • Zwischen Controller und Seite sitzt kein Installer, Treiber oder Telemetrie-Layer; die Daten verlassen deinen Rechner nie.
  • Die Browser-Unterstützung ist über Chrome, Edge, Firefox, Brave und Vivaldi hinweg einheitlich[4]; bei der Haptik ist Safari nur teilweise dabei.

Gamepad-Eingabedaten fließen über die W3C Gamepad API in JoyCheck, ohne dass Daten an einen Server gesendet werden

Der Live-Datenfluss hat drei Eigenschaften, die es zu benennen lohnt:

  • Browser-nativ. Standard-W3C-Gamepad-API. Kein natives Binary, keine Treiberinstallation. Funktioniert in jedem modernen Chromium-Browser, in Firefox und in Safari 16+.
  • 60 bis 144 Hz Abtastung. JoyCheck liest navigator.getGamepads() bei jedem Animationsframe, im selben Takt, in dem der Browser neu zeichnet, passend zu deiner Display-Hz.
  • Keine Datenübertragung. Jede Eingabe wird in deinem Browser-Prozess verarbeitet. Kein XHR, kein fetch, keine Analytics im Widget. In den DevTools überprüfbar.

Was bedeutet es, einen Controller “auszulesen”?

JoyCheck liest sechs Klassen von Eingaben von deinem Controller, und jede lässt sich einem bestimmten Feld der Gamepad API zuordnen.

  • Tasten (gamepad.buttons[]). Jede Taste ist ein GamepadButton-Objekt, das ihren Druckzustand und, wo unterstützt, einen Analogwert meldet.
  • Analog-Sticks (gamepad.axes[0..3]). Das axes-Array ist ein flaches Float-Array. Unter dem W3C-Standardmapping enthält es die X/Y-Positionen des linken und rechten Sticks.
  • Trigger (gamepad.buttons[6,7].value). Trigger liegen im buttons-Array und werden unter dem Standardmapping als Tasten mit einem Analogwert behandelt.
  • Touchpad (gamepad.touchEvents[]). DualShock 4 und DualSense geben Touchpad-Koordinaten als Erweiterung der Gamepad API aus. Die gemeldete Auflösung des Touchpads liegt bei etwa 1920×1080, und bis zu zwei gleichzeitige Berührungspunkte werden erfasst.
  • Gyro und IMU (gamepad.imu, vorgeschlagen). DualSense, Joy-Con und Switch Pro geben alle Sechs-Achsen-IMU-Daten aus.
  • Vibration (gamepad.vibrationActuator.playEffect()). Die vibrationActuator-Schnittstelle eines Gamepad-Objekts stellt eine playEffect()-Methode bereit, die für jeden Motor eine Dauer und Intensität entgegennimmt, bei den Standard-Controllern, die haptische Aktoren melden.

Wie funktioniert die W3C Gamepad API eigentlich?

Die Gamepad API ist eine W3C-Standard-Browserschnittstelle, die verbundene Spielecontroller für JavaScript zugänglich macht. Sie steckt seit Chrome 21 (2012), Firefox 29 (2014), Edge 12 (2015) und Safari 14.1 (2021) in jedem modernen Browser, siehe Can I Use für die aktuelle Support-Matrix.[2]

Der Browser übernimmt den zugrunde liegenden USB- oder Bluetooth-HID-Handshake. Dein Betriebssystem koppelt den Controller; der Browser sieht ihn über OS-Treiberschichten (XInput unter Windows, IOHIDDevice unter macOS, evdev unter Linux); die Seite ruft navigator.getGamepads() auf und erhält ein Snapshot-Array von Gamepad-Objekten.

Jedes Gamepad-Objekt stellt eine Reihe von Feldern bereit:

  • id: ein String-Bezeichner (z. B. “DualSense Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 0ce6)”)
  • axes[]: ein Float-Array mit den Positionen der Analogachsen (Sticks, typischerweise vier Einträge: links X/Y + rechts X/Y)
  • buttons[]: ein Array aus GamepadButton-Objekten, jedes mit den Eigenschaften pressed, value und touched
  • timestamp: Zeitpunkt der letzten Aktualisierung in Millisekunden
  • mapping: “standard”, wenn der Controller dem W3C-Standard-Gamepad-Layout entspricht; sonst ""
  • vibrationActuator: eine Schnittstelle für haptisches Feedback (wo unterstützt)

Die API verlangt eine Nutzeraktion (Tastendruck), bevor sie verbundene Controller freigibt. Das ist die Gestenanforderung: ein Datenschutzmerkmal, das verhindert, dass Seiten deinen Controller im Hintergrund per Fingerprinting erfassen. JoyCheck zeigt “Drücke eine beliebige Taste zum Starten”, bis die Geste ausgelöst wird.

Warum JoyCheck abfragt statt Events zu abonnieren

Die Gamepad API ist im Standard reine Abfrage (poll-only). Es gibt kein onbuttonpress-Event, das du abonnieren könntest: Dein Code fragt navigator.getGamepads() ab und bekommt einen Snapshot des aktuellen Zustands. JoyCheck fragt über requestAnimationFrame ab[5], das den Callback mit der Bildwiederholrate des Displays auslöst (typischerweise 60 Hz, bis zu 240 Hz an Displays mit hoher Bildwiederholrate).

Das Abfragen im Takt der Bildwiederholrate ist aus diesen Gründen der richtige Takt:

  • Das OS aktualisiert den Controller-Zustand etwa in diesem Takt (USB-HID tastet mit 1 kHz ab; der Browser sampelt herunter)
  • Das Rendern passiert mit der Bildwiederholrate, sodass zusätzliche Abfragen doppelte Frames ohne sichtbaren Unterschied erzeugen würden
  • Es hält die CPU-Last minimal, der Abfrage-Callback ist ein Funktionsaufruf pro Frame

Schnelleres Abfragen (per setInterval oder setTimeout) verschwendet CPU und erzeugt doppelte Snapshots. Langsameres Abfragen (z. B. 30 Hz) verpasst schnelle Tastendrücke an Displays mit hoher Bildwiederholrate. requestAnimationFrame passt zum Display, das wiederum zu dem passt, was du tatsächlich siehst.

Warum ist JoyCheck ohne Datenübertragung und wie kann ich das überprüfen?

Wir sagen es dreimal, weil es wichtig ist:

  1. JoyCheck überträgt niemals Controller-Daten an irgendeinen Server.

  2. Die Gamepad API läuft vollständig in deinem Browser-Prozess. Der Controller-Zustand verlässt die Seite nie.

  3. Sieh dir den Quelltext des Widgets an: Jeder API-Aufruf löst sich in einen requestAnimationFrame-Callback auf, der ausschließlich DOM-Knoten aktualisiert. Es gibt keine fetch()-Aufrufe, kein XMLHttpRequest, keine WebSocket-Zugriffe, die Controller-Daten transportieren.

Du kannst das in unter einer Minute selbst überprüfen: Öffne JoyCheck in einem beliebigen Browser, öffne die DevTools (F12), klicke auf den Tab Netzwerk, leere das Protokoll und bediene das Widget 30 Sekunden lang. Der Netzwerk-Tab bleibt bei Controller-Zustand-Anfragen leer. Vollständige Erklärung auf der Datenschutzseite.

Warum einen Browser-Tester statt einer Desktop-App?

Drei Gründe:

Keine Installationshürde. Die Gamepad API ist inzwischen zuverlässig genug, dass es eine unnötige Belastung wäre, Nutzer zum Herunterladen und Ausführen eines Binaries zu bewegen. Ein Seitenaufruf ist schneller als ein Installer; ein Browser ist universeller als eine Windows-only-.exe-Verteilung.

Plattformübergreifend gratis. Dieselbe Seite läuft unter Windows, macOS, Linux und ChromeOS, ohne Builds pro Plattform. Ein Browser-Tester wird einmal ausgeliefert.

In 30 Sekunden prüfbar. Netzwerkaktivität und Speicher einer Webseite lassen sich von jedem Nutzer jederzeit mit den Browser-DevTools inspizieren. Für die Netzwerkaktivität einer Desktop-App braucht es tcpdump, Wireshark oder lsof und Root-Rechte. Die Prüfbarkeit zählt.

“Über Jahre der Hardware-Diagnosearbeit an PC-Peripherie und Spielecontrollern haben browserbasierte Tester rund zwei Drittel der Fehler gefunden, die ein Desktop-Diagnosetool nie sichtbar gemacht hätte. Der Browser liest, was der Controller physisch meldet, und das ist eine andere Ebene der Wahrheit als das, was irgendein installer-basierter Treiber offenlegt.”

Taimoor Bamazai, Gründer, Elites Algorithm Limited

Was sind die bekannten Grenzen von JoyCheck?

Ehrliche Liste, was JoyCheck nicht tut:

  • Kein direkter HID-Zugriff. Das Auslesen des rohen USB-HID-Deskriptors würde WebHID erfordern, eine separate W3C-Spezifikation mit weniger einheitlicher Browser-Unterstützung (heute nur Chrome und Edge).

  • Controller aus der Zeit vor der Gamepad API. DirectInput-only-Controller aus der Zeit vor XInput erscheinen im Browser nicht. Sie bräuchten WebHID plus eine Übersetzungsschicht.

  • Vibrationsunterstützung variiert je nach Browser. Firefox hinkt Chrome beim vibrationActuator hinterher; Safari hat nur begrenzte Unterstützung. JoyCheck weist auf die Einschränkung sauber hin.

  • Trigger-Druck bei Xbox-Controllern hängt von der Treiberschicht ab. Manche Bluetooth-Kopplungen melden binäre Trigger (nur an/aus, kein Analogbereich). Eine kabelgebundene USB-Verbindung behebt das meist.

Für plattformspezifische Diagnosewege jenseits dessen, was der Browser sehen kann, deckt die dedizierte Anleitung Fehlermuster ab, die einen Eingriff auf der Hardware-Seite erfordern.

Für controllerspezifische Diagnose-Anleitungen, die dieselbe browserbasierte Ausleseschicht nutzen, decken der Kopplungsleitfaden für den Switch Pro Controller, die DualSense-Kalibrierungsanleitung und der Kalibrierungsleitfaden für den PS4-Controller plattformspezifische Kopplungseigenheiten ab, die die Gamepad API allein nicht lösen kann. Speziell für DualShock-Nutzer zeigt die DualShock-Kalibrierungs-GUI das Prüfen von Mittellage, Totzone und Triggern im Browser.

Quellen und Referenzen

  1. W3C-Gamepad-API-Spezifikation. Der W3C-Standard, der die normalisierten Wertebereiche der Analog-Sticks (-1.0 bis +1.0), die Abfrageschnittstelle und die Nutzeraktions-Anforderung definiert, die jeder moderne Browser für verbundene Gamepads umsetzt.

  2. MDN Web Docs: Gamepad API. Mozillas Entwicklerreferenz zu browser-nativem Gamepad-Auslesen, dem Abfragetakt pro Animationsframe und der Haptic-Actuator[3]-Erweiterung, die für Vibrationsunterstützung genutzt wird.

  3. Gamepad-Haptic-Actuator-API-Referenz (MDN). MDN-Referenz zur Haptic-Actuator-Erweiterung, zur Browser-Hersteller-Unterstützung über DualSense, Xbox Series X|S und Switch Pro Controller sowie zur teilweisen Safari-Abdeckung.

  4. caniuse.com Gamepad-API-Support-Matrix. Aktuelle Aufschlüsselung der Browser-Unterstützung über Chrome, Edge, Firefox, Brave, Vivaldi, Safari und iOS Safari, einschließlich der Version, in der die Haptik verfügbar wurde.

  5. web.dev-Leitfaden zur Gamepad API. Googles Web-Plattform-Referenz zu Verbindungsereignissen, Abfragemustern und der empfohlenen requestAnimationFrame-Einbindung, die JoyCheck intern nutzt.

Beobachtungen zur Abtastrate von JoyCheck (gemessen 2026-05)

Browser deckeln das Gamepad-API-Auslesen auf den requestAnimationFrame-Takt. In unserer Analyse haben wir dieselben Controller unter identischen Display-Bedingungen gemessen. Alle Messwerte: frische Chrome-120-Sitzung, USB-Verbindung sofern nicht anders angegeben, gleitendes 5-Sekunden-Fenster.

ControllerNative HW-AbtastungJoyCheck-gemessen (60-Hz-Display)Hinweise
PS5 DualSense (USB)250 Hz59, 60 HzDurch rAF gedeckelt
PS5 DualSense (Bluetooth)250 Hz59, 60 HzDurch rAF gedeckelt
Xbox-Series-Controller (USB)125 Hz59, 60 HzDurch rAF gedeckelt
8BitDo Pro 2 (Bluetooth)125 Hz59, 60 HzDurch rAF gedeckelt
Switch Pro Controller (Bluetooth)200 Hz59, 60 HzDurch rAF gedeckelt
Logitech G29 (USB)100 Hz59, 60 HzDurch rAF gedeckelt

Gemessen mit dem In-Browser-Sampler von JoyCheck. 144-Hz-Displays heben die Deckelung proportional an; die Messwerte sind zum Vergleich zwischen Browsern auf eine 60-Hz-Basislinie normalisiert.

Häufige Fragen dazu, wie JoyCheck funktioniert

Was ist die Gamepad API?

Die W3C Gamepad API ist eine browser-native Schnittstelle, über die JavaScript verbundene USB- und Bluetooth-Controller auslesen kann. Sie gibt jede Taste als 0-oder-1-Druckzustand aus, jeden Analog-Stick als X/Y-Koordinaten von -1.0 bis 1.0 und Trigger als analoge Druckwerte von 0.0 bis 1.0. Verfügbar in Chrome, Edge, Firefox und Safari 14.1+.

Braucht JoyCheck eine Berechtigung, um meinen Controller auszulesen?

Es sind keine systemweiten Berechtigungen nötig, aber der Browser verlangt eine Nutzeraktion (ein beliebiger Tastendruck am Controller), bevor er dessen Zustand freigibt. Das ist ein Datenschutz- und Energiesparmerkmal der Gamepad-API-Spezifikation, keine Einschränkung von JoyCheck.

Wie oft liest JoyCheck meinen Controller aus?

JoyCheck fragt navigator.getGamepads() bei jedem Animationsframe über requestAnimationFrame ab. Das entspricht deiner Bildwiederholrate: 60 Hz an einem normalen Monitor, 120 oder 144 Hz an einem Display mit hoher Bildwiederholrate. Die Hardware kann schneller abtasten, aber der Browser kann das JavaScript nicht zugänglich machen.

Warum erscheint mein Controller erst, nachdem ich eine Taste gedrückt habe?

Laut Spezifikation verbirgt die Gamepad API verbundene Controller, bis der Nutzer eine Eingabe macht. Das verhindert passives Fingerprinting und senkt die Hintergrund-CPU-Last. Drücke eine beliebige Taste, um die API zu wecken; der Controller wird dann innerhalb eines Animationsframes für JoyCheck sichtbar.

Kann JoyCheck meine Tastatur und Maus auslesen?

Nur über den Tab Tastatur: Tastatureingaben laufen über die Standard-KeyboardEvent-API, nicht über die Gamepad API. Mauseingaben liegen außerhalb des Funktionsumfangs von JoyCheck.

Funktioniert das auf Chromebooks?

Ja. ChromeOS unterstützt die Gamepad API in Chrome (und in jedem Chromium-basierten Browser, der über den Play Store installiert wird).

Warum melden nicht alle Controller Vibration?

Die Gamepad-Haptics-Erweiterung hängt vom Browser und vom Controller ab. Chrome/Edge/Firefox unterstützen sie für die meisten modernen Pads (DualSense, Xbox Series X|S, Switch Pro). Die Unterstützung in Safari ist unvollständig. Manche älteren Controller melden gar keine haptischen Aktoren.

Teste deinen Controller im Browser

Ohne Installation, ohne Konto. Deine Eingaben verlassen dein Gerät nie.