Bied een meeslepende, volledig scherm-ervaring voor uiteenlopende use cases, zoals interactieve websites, games en streaming van externe bureaubladen of applicaties.
Nu steeds meer gebruikers het grootste deel van hun tijd in de browser doorbrengen, streven rijkelijk interactieve websites, games, streaming van externe bureaubladen en applicatiestreaming naar een meeslepende ervaring op volledig scherm. Om dit te bereiken, hebben websites toegang nodig tot speciale toetsen en sneltoetsen terwijl ze in de volledig schermmodus staan, zodat ze gebruikt kunnen worden voor navigatie, menu's of games. Enkele voorbeelden van de toetsen die hiervoor nodig kunnen zijn, zijn Esc , Alt + Tab , Cmd + ` en Ctrl + N.
Standaard zijn deze toetsen niet beschikbaar voor de webapplicatie, omdat ze worden vastgelegd door de browser of het onderliggende besturingssysteem. De Keyboard Lock API zorgt ervoor dat websites alle beschikbare toetsen kunnen gebruiken die door het hostbesturingssysteem worden toegestaan (zie Browsercompatibiliteit ).

De toetsenbordvergrendelings-API gebruiken
De Keyboard
van de toetsenbord-API biedt functies waarmee u kunt schakelen tussen het vastleggen van toetsaanslagen op het fysieke toetsenbord en het verkrijgen van informatie over de toetsenbordindeling van de gebruiker.
Voorwaarde
Er zijn twee soorten volledig scherm beschikbaar in moderne browsers: JavaScript-geïnitieerd via de Fullscreen API en door de gebruiker geïnitieerd via een sneltoets. De Keyboard Lock API is alleen beschikbaar wanneer JavaScript-geïnitieerd volledig scherm actief is. Hier is een voorbeeld van JavaScript-geïnitieerd volledig scherm:
await document.documentElement.requestFullscreen();
Functiedetectie
U kunt het volgende patroon gebruiken om te controleren of de Keyboard Lock API wordt ondersteund:
if ('keyboard' in navigator && 'lock' in navigator.keyboard) {
// Supported!
}
Het toetsenbord vergrendelen
De lock()
-methode van de Keyboard
retourneert een belofte na het inschakelen van het vastleggen van toetsaanslagen voor een of alle toetsen op het fysieke toetsenbord. Deze methode kan alleen toetsen vastleggen die toegang hebben van het onderliggende besturingssysteem. De lock()
-methode gebruikt een array met een of meer toetscodes om te vergrendelen. Als er geen toetscodes worden opgegeven, worden alle toetsen vergrendeld. Een lijst met geldige toetscodewaarden is beschikbaar in de UI Events KeyboardEvent code Values- specificatie.
Alle sleutels vastleggen
In het volgende voorbeeld worden alle toetsaanslagen vastgelegd.
navigator.keyboard.lock();
Het vastleggen van specifieke sleutels
In het volgende voorbeeld worden de toetsen W , A , S en D vastgelegd. Deze toetsen worden vastgelegd, ongeacht welke modifiers er bij het indrukken van de toets worden gebruikt. Uitgaande van een Amerikaanse QWERTY-indeling zorgt het registreren van "KeyW"
ervoor dat W , Shift + W , Control + W , Control + Shift + W en alle andere toetscombinaties met een W naar de app worden verzonden. Hetzelfde geldt voor "KeyA"
, "KeyS"
en "KeyD"
.
await navigator.keyboard.lock([
"KeyW",
"KeyA",
"KeyS",
"KeyD",
]);
Je kunt reageren op vastgelegde toetsaanslagen met behulp van toetsenbordgebeurtenissen. Deze code gebruikt bijvoorbeeld de onkeydown
-gebeurtenis:
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.
}
});
Het toetsenbord ontgrendelen
De unlock()
methode ontgrendelt alle sleutels die zijn vastgelegd door de lock()
methode en retourneert synchroon.
navigator.keyboard.unlock();
Wanneer een document wordt gesloten, roept de browser altijd impliciet unlock()
aan.
Demonstratie
Je kunt de Keyboard Lock API testen door deze demo uit te voeren. Bekijk zeker de broncode . Klik op de onderstaande knop Volledig scherm openen om de demo in een nieuw venster te openen, zodat je in de volledig schermmodus kunt werken.
Beveiligingsoverwegingen
Een zorg met deze API is dat deze gebruikt kan worden om alle toetsen te grijpen en (in combinatie met de Fullscreen API en de PointerLock API ) te voorkomen dat de gebruiker de webpagina verlaat. Om dit te voorkomen, vereist de specificatie dat de browser een manier biedt om de toetsenbordvergrendeling te verlaten, zelfs als alle toetsen door de API worden opgevraagd. In Chrome is dit een nooduitgang door een lange (twee seconden durende) Esc -toets in te drukken om de toetsenbordvergrendeling te verlaten.
Nuttige links
- Specificatieontwerp
- GitHub-repository
- ChromeStatus-invoer
- Chrome-trackingbug
- Toetscodes voor standaardtoetsenborden
Dankbetuigingen
Dit artikel is beoordeeld door Joe Medley en Kayce Basques . De Keyboard Lock-specificatie is geschreven door Gary Kacmarcik en Jamie Walch . Hero-afbeelding door Ken Suarez op Unsplash .