Signatur
Beschreibung
Die Schnittstelle VirtualKeyboard gehört zur VirtualKeyboard API. Man erreicht sie über navigator.virtualKeyboard. Sie ist für Geräte ohne Hardwaretastatur gedacht, etwa Tablets, Smartphones oder Kiosk-Terminals. Normalerweise verkleinert oder verschiebt der Browser beim Einblenden der Bildschirmtastatur den sichtbaren Bereich (Viewport). Mit dieser Schnittstelle übernimmt die Webanwendung diese Aufgabe selbst.
Die wichtigsten Mitglieder:
overlaysContent(boolean): Beitruelegt sich die Tastatur über den Inhalt, und der Browser passt den Viewport nicht mehr an. Die Seite ist dann selbst für das Layout zuständig.boundingRect(DOMRect, nur lesbar): Position und Größe der Tastatur. Sinnvolle Werte gibt es nur, wennoverlaysContentauftruesteht.show()/hide(): Blendet die Tastatur per Skript ein oder aus. Das wirkt nur, wenn das fokussierte Element das Attributvirtualkeyboardpolicy="manual"hat.- Event
geometrychange: Wird ausgelöst, wenn sich die Tastaturgeometrie ändert, also beim Ein- oder Ausblenden. Man registriert es mitaddEventListener("geometrychange", …)oder über die Eigenschaftongeometrychange.
Wenn overlaysContent aktiv ist, stellt der Browser außerdem die CSS-Umgebungsvariablen keyboard-inset-top, keyboard-inset-right, keyboard-inset-bottom, keyboard-inset-left, keyboard-inset-width und keyboard-inset-height bereit. So lässt sich das Layout mit env() rein in CSS anpassen, zum Beispiel für eine Chat-Eingabeleiste, die direkt über der Tastatur bleiben soll.
Die API ist nur in sicheren Kontexten (HTTPS) verfügbar und kann nur im obersten Browsing-Kontext genutzt werden, nicht in iframes.
Rückgabewert
navigator.virtualKeyboard abgerufen. In Browsern ohne Unterstützung ist der Wert undefined.Beispiele
Unterstützung prüfen und Layout-Steuerung übernehmen
if ('virtualKeyboard' in navigator) {
// Browser soll den Viewport nicht mehr automatisch anpassen
navigator.virtualKeyboard.overlaysContent = true;
console.log('overlaysContent:', navigator.virtualKeyboard.overlaysContent);
} else {
console.log('VirtualKeyboard API nicht verfügbar');
}
Chat-Eingabeleiste über der Tastatur halten (geometrychange)
const vk = navigator.virtualKeyboard;
const inputBar = document.querySelector('#chat-input');
if (vk) {
vk.overlaysContent = true;
const onGeometryChange = (event) => {
const { x, y, width, height } = event.target.boundingRect;
console.log(`Tastatur: ${width}x${height} bei (${x}, ${y})`);
inputBar.style.marginBottom = `${height}px`;
};
vk.addEventListener('geometrychange', onGeometryChange);
// Später wieder abmelden, z. B. beim Verlassen der Ansicht
// vk.removeEventListener('geometrychange', onGeometryChange);
}
Tastatur manuell ein- und ausblenden
// HTML: <div id="editor" contenteditable virtualkeyboardpolicy="manual"></div>
// <button id="kb-toggle">Tastatur</button>
const editor = document.querySelector('#editor');
const toggle = document.querySelector('#kb-toggle');
let visible = false;
toggle.addEventListener('click', () => {
editor.focus();
if (visible) {
navigator.virtualKeyboard.hide();
} else {
navigator.virtualKeyboard.show();
}
visible = !visible;
});
// Alternativ per on-Property
navigator.virtualKeyboard.ongeometrychange = (e) => {
visible = e.target.boundingRect.height > 0;
};
Layout rein per CSS mit env()-Variablen
navigator.virtualKeyboard.overlaysContent = true;
const style = document.createElement('style');
style.textContent = `
.toolbar {
position: fixed;
left: 0;
right: 0;
bottom: env(keyboard-inset-height, 0px);
}
`;
document.head.append(style);
// Wichtig · Fallstricke
- Experimentell und nur in Chromium: Chrome, Edge und Opera unterstützen die API ab Version 94. Firefox und Safari (auch unter iOS) unterstützen sie nicht. Deshalb immer mit
'virtualKeyboard' in navigatorprüfen und eine Alternative vorsehen, etwawindow.visualViewportmit demresize-Event. show()undhide()wirken nur, wenn das fokussierte Elementvirtualkeyboardpolicy="manual"gesetzt hat.show()braucht außerdem eine Nutzeraktion (transiente Aktivierung), etwa einen Klick.boundingRectund diekeyboard-inset-*-Variablen liefern nur dann echte Werte, wennoverlaysContent = truegesetzt ist. Andernfalls sind sie 0.- Mit
overlaysContent = truekann die Tastatur Eingabefelder verdecken. Das Layout muss also selbst angepasst werden, sonst leidet die Bedienbarkeit. - Die API gibt es nur in sicheren Kontexten (HTTPS) und im obersten Dokument. In iframes steht sie nicht zur Verfügung.
- Auf Desktop-Geräten mit Hardwaretastatur wird
geometrychangein der Regel nie ausgelöst.