Offri un'esperienza immersiva a schermo intero per una serie di casi d'uso, tra cui siti web interattivi, giochi e streaming di applicazioni o desktop remoto.
Poiché sempre più utenti trascorrono la maggior parte del loro tempo nel browser, siti web, giochi, streaming di desktop remoto e streaming di applicazioni interattivi e ricchi si sforzano di offrire un'esperienza immersiva a schermo intero. Per farlo, i siti devono accedere a tasti speciali e scorciatoie da tastiera mentre sono in modalità a schermo intero, in modo che possano essere utilizzati per la navigazione, i menu o i giochi. Alcuni esempi di tasti che potrebbero essere necessari sono Esc, Alt + Tab, Cmd + ` e Ctrl + N.
Per impostazione predefinita, queste chiavi non sono disponibili per l'applicazione web perché vengono acquisite dal browser o dal sistema operativo sottostante. L'API Keyboard Lock consente ai siti web di utilizzare tutti i tasti disponibili consentiti dal sistema operativo host (vedi Compatibilità del browser).

Utilizzo dell'API Keyboard Lock
L'interfaccia Keyboard
dell'API Keyboard fornisce funzioni che attivano/disattivano l'acquisizione delle pressioni dei tasti dalla tastiera fisica, nonché informazioni sul layout della tastiera dell'utente.
Prerequisito
Nei browser moderni sono disponibili due tipi di modalità a schermo intero: avviata tramite JavaScript tramite l'API Fullscreen e avviata dall'utente tramite una scorciatoia da tastiera. L'API Keyboard Lock è disponibile solo quando è attiva la modalità a schermo intero avviata da JavaScript. Ecco un esempio di schermo intero avviato da JavaScript:
await document.documentElement.requestFullscreen();
Rilevamento delle funzionalità
Puoi utilizzare il seguente pattern per verificare se l'API Keyboard Lock è supportata:
if ('keyboard' in navigator && 'lock' in navigator.keyboard) {
// Supported!
}
Bloccare la tastiera
Il metodo lock()
dell'interfaccia Keyboard
restituisce una promessa dopo aver attivato l'acquisizione delle pressioni dei tasti per uno o tutti i tasti della tastiera fisica. Questo metodo può acquisire solo le chiavi a cui viene concesso l'accesso dal sistema operativo sottostante. Il metodo lock()
accetta un array di uno o più codici chiave da bloccare. Se non vengono forniti codici chiave, tutte le chiavi verranno bloccate. Un elenco di valori di codici chiave validi è disponibile nella specifica UI Events KeyboardEvent code Values.
Acquisizione di tutti i tasti
L'esempio seguente acquisisce tutte le pressioni dei tasti.
navigator.keyboard.lock();
Acquisizione di tasti specifici
L'esempio seguente acquisisce i tasti W, A, S e D. Acquisisce questi tasti indipendentemente dai tasti di modifica utilizzati con la pressione del tasto. Supponendo un layout QWERTY statunitense, la registrazione di "KeyW"
garantisce che W, Maiusc + W, Controllo + W, Controllo + Maiusc + W e tutte le altre combinazioni di tasti modificatori con W vengano inviate all'app. Lo stesso vale per "KeyA"
, "KeyS"
e "KeyD"
.
await navigator.keyboard.lock([
"KeyW",
"KeyA",
"KeyS",
"KeyD",
]);
Puoi rispondere alle pressioni dei tasti acquisite utilizzando gli eventi della tastiera.
Ad esempio, questo codice utilizza l'evento onkeydown
:
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.
}
});
Sbloccare la tastiera
Il metodo unlock()
sblocca tutte le chiavi acquisite dal metodo lock()
e viene restituito in modo sincrono.
navigator.keyboard.unlock();
Quando un documento viene chiuso, il browser chiama sempre implicitamente unlock()
.
Demo
Puoi testare l'API Keyboard Lock eseguendo questa demo. Assicurati di controllare il codice sorgente. Se fai clic sul pulsante Inserisci modalità a schermo intero di seguito, la demo viene avviata in una nuova finestra, in modo da poter passare alla modalità a schermo intero.
Considerazioni sulla sicurezza
Un problema con questa API è che potrebbe essere utilizzata per recuperare tutte le chiavi e (in combinazione con l'API Fullscreen e l'API PointerLock) impedire all'utente di uscire dalla pagina web. Per evitare questo problema, la specifica richiede che il browser fornisca all'utente un modo per uscire dal blocco della tastiera anche se tutte le chiavi sono richieste dall'API. In Chrome, questa via di fuga è una pressione prolungata (due secondi) del tasto Esc per uscire dal blocco della tastiera.
Link utili
- Bozza delle specifiche
- Repository GitHub
- Voce di ChromeStatus
- Bug di monitoraggio di Chrome
- Codici chiave per tastiere standard
Ringraziamenti
Questo articolo è stato rivisto da Joe Medley e Kayce Basques. La specifica di blocco della tastiera è stata creata da Gary Kacmarcik e Jamie Walch. Immagine promozionale di Ken Suarez su Unsplash.