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.
Zamanlarının çoğunu tarayıcıda geçiren kullanıcıların sayısı arttıkça zengin etkileşimli web siteleri, oyunlar, uzak masaüstü aktarımı ve uygulama aktarımı, etkileyici ve tam ekran bir deneyim sunmaya çalışı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 bu tuşlar ve kısayollar kullanılabilir. Gerekebilecek tuşlara örnek olarak Esc, Alt + Tab, 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 anahtarları kullanmasına olanak tanır (Tarayıcı uyumluluğu bölümüne bakın).
Klavye Kilidi API'sini kullanma
Klavye API'sinin Keyboard
arayüzü, fiziksel klavyeden tuş basma işlemlerinin yakalanmasını açma/kapatma işlevlerinin yanı sıra kullanıcının klavye düzeni hakkında bilgi alma işlevleri sağlar.
Ö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 aşağıda görebilirsiniz:
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 listesi UI Events KeyboardEvent code Values spesifikasyonunda yer alır.
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 anahtarları yakalanmıştır. Bu tuşları, tuş basma işleminde hangi değiştiricilerin kullanıldığına bakılmaksızın yakalar. ABD QWERTY düzeni varsayımıyla, "KeyW"
kaydetme işlemi 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önderilmesini sağlar. Aynı durum "KeyA"
, "KeyS"
ve "KeyD"
için de geçerlidir.
await navigator.keyboard.lock([
"KeyW",
"KeyA",
"KeyS",
"KeyD",
]);
Klavye etkinliklerini kullanarak yakalanan tuş basma işlemlerine 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 kilidini açma
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 unlock()
işlevini dolaylı olarak ç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 ile ilgili endişelerden biri, tüm anahtarları almak ve (Tam Ekran API ve PointerLock API ile birlikte) kullanıcının web sayfasından çıkmasını engellemek için kullanılabilmesidir. 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 çıkışı tetiklemek için Esc tuşuna uzun (iki saniye) basmaktır.
Faydalı bağlantılar
- Özellik taslağı
- GitHub deposu
- ChromeStatus girişi
- Chrome izleme hatası
- Standart klavyeler için tuş kodları
Teşekkür ederiz
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 hero resim.