Etkileşimli web siteleri, oyunlar ve uzaktan masaüstü veya uygulama aktarımı gibi çeşitli kullanım alanları için etkileyici, tam ekran bir deneyim sunun.
Gün geçtikçe daha fazla kullanıcı zamanlarının çoğunu tarayıcıda geçiriyor. Zengin etkileşimli web siteleri, oyunlar, uzaktan masaüstü yayını ve uygulama akışı özellikleri, yoğun bir tam ekran deneyimi sunmak için çabalıyor. Bunu yapmak için sitelerin tam ekran modundayken özel tuşlara ve klavye kısayollarına erişmesi gerekir. Böylece gezinme, menüler veya oyunlar için kullanılabilirler. Gerekli olabilecek tuşlara örnek olarak Esc, Alt + Sekme, Cmd + ` ve Ctrl + N verilebilir.
Bu tuşlar, tarayıcı veya temel işletim sistemi tarafından yakalandığı için varsayılan olarak web uygulaması tarafından kullanılamaz. Klavye Kilidi API'si, web sitelerinin ana makine işletim sistemi tarafından izin verilen tüm mevcut tuşları kullanmasını sağlar (Tarayıcı uyumluluğu sayfasına bakın).
Klavye Kilidi API'sini kullanma
Klavye API'sinin Keyboard
arayüzü, fiziksel klavyeden tuş basamalarının yakalanmasını açma/kapatma ve kullanıcının klavye düzeni hakkında bilgi almayı sağlayan işlevler sunar.
Ön koşul
Modern tarayıcılarda iki tür tam ekran vardır: Tam Ekran API aracılığıyla JavaScript tarafından başlatılan ve kullanıcı tarafından klavye kısayoluyla başlatılan. Klavye Kilidi API'si yalnızca JavaScript tarafından başlatılan tam ekran etkinken kullanılabilir. JavaScript tarafından başlatılan tam ekran örneğini burada bulabilirsiniz:
await document.documentElement.requestFullscreen();
Özellik algılama
Klavye Kilidi API'sinin desteklenip desteklenmediğini kontrol etmek için aşağıdaki kalıbı kullanabilirsiniz:
if ('keyboard' in navigator && 'lock' in navigator.keyboard) {
// Supported!
}
Klavyeyi kilitleme
Keyboard
arayüzünün lock()
yöntemi, fiziksel klavyedeki tuşların herhangi biri veya tümü için tuş basma işlemlerinin yakalanmasını etkinleştirdikten sonra bir promise döndürür. Bu yöntem yalnızca temel işletim sistemi tarafından erişim izni verilen anahtarları yakalayabilir. lock()
yöntemi, kilitlenecek bir veya daha fazla anahtar kodu dizisi alır. Anahtar kodu sağlanmazsa tüm anahtarlar kilitlenir. Geçerli anahtar kodu değerlerinin bir listesi Kullanıcı Arayüzü Etkinlikleri Klavye Etkinliği kod Değerleri spesifikasyonunda mevcuttur.
Tüm anahtarları yakalama
Aşağıdaki örnekte tüm tuş basışları yakalanmaktadır.
navigator.keyboard.lock();
Belirli anahtarları yakalama
Aşağıdaki örnekte W, A, S ve D tuşları yakalanır. Bu tuşları, tuş basma işleminde hangi değiştiricilerin kullanıldığına bakılmaksızın yakalar. ABD QWERTY düzeni varsa "KeyW"
'ü kaydettiğinizde W, Üst Karakter + W, Denetleyici + W, Denetleyici + Üst Karakter + W ve W içeren diğer tüm tuş değiştirici kombinasyonlarının uygulamaya gönderilmesi sağlanır. Aynı durum "KeyA"
, "KeyS"
ve "KeyD"
için de geçerlidir.
await navigator.keyboard.lock([
"KeyW",
"KeyA",
"KeyS",
"KeyD",
]);
Klavye etkinliklerini kullanarak, yakalanan tuşlara basıldığında yanıt verebilirsiniz.
Örneğin, bu kodda onkeydown
etkinliği kullanılmaktadır:
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.
}
});
Klavyenin kilidi açılıyor
unlock()
yöntemi, lock()
yöntemi tarafından yakalanan tüm anahtarların kilidini açar ve eşzamanlı olarak döndürür.
navigator.keyboard.unlock();
Bir doküman kapatıldığında tarayıcı her zaman dolaylı olarak unlock()
çağırır.
Demo
Klavye Kilidi API'sini Glitch'te demo'yu çalıştırarak test edebilirsiniz. Kaynak koduna göz atmayı unutmayın. Aşağıdaki Tam ekrana geç düğmesini tıkladığınızda demo yeni bir pencerede açılır ve tam ekran moduna girebilir.
Güvenlikle İlgili Dikkat Edilmesi Gereken Noktalar
Bu API'deki sorunlardan biri, tüm anahtarları almak için kullanılabilmesi ve (Fullscreen API ve PointerLock API'si ile birlikte) kullanıcının web sayfasından çıkmasının engellenmesidir. Bu durumu önlemek için spesifikasyon, API tarafından tüm tuşlar istendiğinde bile kullanıcının klavye kilidinden çıkabileceği bir yöntem sunmasını zorunlu kılar. Chrome'da bu çıkış kapısı, Klavye Kilidi'nden çıkmayı tetiklemek için Esc tuşuna uzun (iki saniye) basmaktır.
Faydalı bağlantılar
- Spesifikasyon taslağı
- GitHub deposu
- ChromeStatus girişi
- Chrome izleme hatası
- Standart klavyeler için tuş kodları
Teşekkür
Bu makale Joe Medley ve Kayce Basques tarafından incelenmiştir. Klavye Kilidi spesifikasyonu, Gary Kacmarcik ve Jamie Walch tarafından yazılmıştır. Unsplash'taki Ken Suarez tarafından oluşturulan lokomotif resim.