Sie bieten ein immersives Vollbilderlebnis für eine Vielzahl von Anwendungsfällen, darunter interaktive Websites, Spiele und Remote-Desktop- oder Anwendungsstreaming.
Immer mehr Nutzer verbringen die meiste Zeit im Browser. Interaktive Websites, Spiele, Remote-Desktop-Streaming und Anwendungsstreaming bieten ein umfassendes Vollbild-Erlebnis. Dazu benötigen Websites Zugriff auf spezielle Tasten und Tastenkombinationen, während sie im Vollbildmodus sind, damit sie für die Navigation, Menüs oder Spiele verwendet werden können. Beispiele für die erforderlichen Tasten sind Esc, Alt + Tab, Cmd + ` und Strg + N.
Standardmäßig sind diese Tasten für die Webanwendung nicht verfügbar, da sie vom Browser oder dem zugrunde liegenden Betriebssystem erfasst werden. Mit der Keyboard Lock API können Websites alle verfügbaren Tasten verwenden, die vom Hostbetriebssystem zugelassen werden (siehe Browserkompatibilität).

Keyboard Lock API verwenden
Die Keyboard
-Schnittstelle der Keyboard API bietet Funktionen, mit denen die Erfassung von Tastendrücken über die physische Tastatur aktiviert oder deaktiviert werden kann. Außerdem können Informationen zum Tastaturlayout des Nutzers abgerufen werden.
Voraussetzungen
In modernen Browsern gibt es zwei Arten von Vollbildmodi: den über JavaScript initiierten Vollbildmodus über die Fullscreen API und den vom Nutzer über eine Tastenkombination initiierten Vollbildmodus. Die Keyboard Lock API ist nur verfügbar, wenn Vollbildmodus durch JavaScript aktiviert ist. Hier ein Beispiel für die Vollbilddarstellung, die durch JavaScript initiiert wird:
await document.documentElement.requestFullscreen();
Funktionserkennung
Mit dem folgenden Muster können Sie prüfen, ob die Keyboard Lock API unterstützt wird:
if ('keyboard' in navigator && 'lock' in navigator.keyboard) {
// Supported!
}
Tastatur sperren
Die Methode lock()
der Keyboard
-Schnittstelle gibt ein Promise zurück, nachdem die Erfassung von Tastendrücken für eine oder alle Tasten auf der physischen Tastatur aktiviert wurde. Mit dieser Methode können nur Schlüssel erfasst werden, auf die das zugrunde liegende Betriebssystem Zugriff gewährt. Für die Methode lock()
ist ein Array mit einem oder mehreren zu sperrenden Tastencodes erforderlich. Wenn keine Tastencodes angegeben sind, werden alle Tasten gesperrt. Eine Liste der gültigen Tastencode-Werte finden Sie in der Spezifikation UI Events KeyboardEvent code Values.
Alle Tasten erfassen
Im folgenden Beispiel werden alle Tastendrücke erfasst.
navigator.keyboard.lock();
Bestimmte Tasten erfassen
Im folgenden Beispiel werden die Tasten W, A, S und D erfasst. Diese Tasten werden unabhängig davon erfasst, welche Modifizierer mit dem Tastendruck verwendet werden. Bei einem US-QWERTZ-Layout wird durch die Registrierung von "KeyW"
sichergestellt, dass W, Umschalttaste + W, Strg + W, Strg + Umschalttaste + W und alle anderen Tastenkombinationen mit W an die App gesendet werden. Das Gleiche gilt für "KeyA"
, "KeyS"
und "KeyD"
.
await navigator.keyboard.lock([
"KeyW",
"KeyA",
"KeyS",
"KeyD",
]);
Sie können mit Tastaturereignissen auf erfasste Tastendrücke reagieren.
Im folgenden Code wird beispielsweise das onkeydown
-Ereignis verwendet:
document.addEventListener('keydown', (event) => {
if ((event.code === 'KeyA') && !(event.ctrlKey || event.metaKey)) {
// Do something when the 'A' key was pressed, but only
// when not in combination with the command or control key.
}
});
Tastatur entsperren
Die Methode unlock()
entsperrt alle Schlüssel, die von der Methode lock()
erfasst wurden, und gibt synchron zurück.
navigator.keyboard.unlock();
Wenn ein Dokument geschlossen wird, ruft der Browser immer implizit unlock()
auf.
Demo
Sie können die Keyboard Lock API testen, indem Sie diese Demo ausführen. Sehen Sie sich den Quellcode an. Wenn Sie unten auf die Schaltfläche „Vollbildmodus aktivieren“ klicken, wird die Demo in einem neuen Fenster gestartet, sodass der Vollbildmodus aktiviert werden kann.
Sicherheitsaspekte
Ein Problem bei dieser API ist, dass sie verwendet werden könnte, um alle Schlüssel abzurufen und (in Verbindung mit der Fullscreen API und der PointerLock API) den Nutzer daran zu hindern, die Webseite zu verlassen. Um dies zu verhindern, muss der Browser laut Spezifikation dem Nutzer eine Möglichkeit bieten, die Tastatursperre zu beenden, auch wenn alle Tasten von der API angefordert werden. In Chrome wird das Beenden der Tastatursperre durch langes (zwei Sekunden) Drücken der Esc-Taste ausgelöst.
Nützliche Links
- Spezifikationsentwurf
- GitHub-Repository
- ChromeStatus-Eintrag
- Chrome-Tracking-Fehler
- Tastencodes für Standardtastaturen
Danksagungen
Dieser Artikel wurde von Joe Medley und Kayce Basques geprüft. Die Spezifikation für die Tastatursperre wurde von Gary Kacmarcik und Jamie Walch erstellt. Hero-Image von Ken Suarez auf Unsplash.