Signatur
Beschreibung
Die statische Methode IdleDetector.requestPermission() fragt den Nutzer, ob die aktuelle Herkunft (Origin) erkennen darf, ob er inaktiv ist (keine Tastatur-, Maus- oder Touch-Eingaben) oder ob der Bildschirm gesperrt ist. Das zurückgegebene Promise wird mit dem String "granted" oder "denied" erfüllt, sobald der Nutzer entschieden hat bzw. eine frühere Entscheidung vorliegt.
Die Methode muss aufgerufen werden, bevor IdleDetector.prototype.start() genutzt wird. Ohne erteilte Berechtigung (idle-detection) schlägt start() mit einem NotAllowedError fehl.
Wichtig: Der Aufruf erfordert eine vorübergehende Nutzeraktivierung (transient user activation) – also typischerweise einen Klick-Handler. Wird die Methode ohne Nutzergeste aufgerufen, wird das Promise mit einem NotAllowedError abgelehnt. Typische Einsatzfälle sind Chat- und Kollaborations-Apps (Status „abwesend“), Kiosk-Anwendungen, die sich nach Inaktivität zurücksetzen, oder das Pausieren ressourcenintensiver Vorgänge.
Rückgabewert
"granted" erfüllt wird, wenn der Zugriff erlaubt wurde, sonst mit "denied". Es wird mit NotAllowedError abgelehnt, wenn keine Nutzeraktivierung vorliegt oder die Berechtigungsrichtlinie den Zugriff verbietet.Beispiele
Berechtigung per Klick anfordern und Erkennung starten
const button = document.querySelector('#idle-start');
button.addEventListener('click', async () => {
if (!('IdleDetector' in window)) {
console.log('Idle Detection API wird nicht unterstützt.');
return;
}
const state = await IdleDetector.requestPermission();
if (state !== 'granted') {
console.log('Zugriff verweigert.');
return;
}
const controller = new AbortController();
const detector = new IdleDetector();
detector.addEventListener('change', () => {
console.log(`Nutzer: ${detector.userState}, Bildschirm: ${detector.screenState}`);
});
await detector.start({ threshold: 60_000, signal: controller.signal });
console.log('Idle-Erkennung läuft.');
});
Vorab-Prüfung über die Permissions API
const ensureIdlePermission = async () => {
const status = await navigator.permissions.query({ name: 'idle-detection' });
if (status.state === 'granted') return true;
if (status.state === 'denied') return false;
// state === 'prompt': nur innerhalb einer Nutzergeste nachfragen
return (await IdleDetector.requestPermission()) === 'granted';
};
document.querySelector('#away-status').addEventListener('click', async () => {
const ok = await ensureIdlePermission();
console.log(ok ? 'Abwesenheitsstatus aktiviert' : 'Keine Berechtigung');
});
Fehlerbehandlung ohne Nutzergeste
const tryWithoutGesture = async () => {
try {
const result = await IdleDetector.requestPermission();
console.log('Ergebnis:', result);
} catch (err) {
console.log(`${err.name}: ${err.message}`);
}
};
// Direkt beim Laden aufgerufen – ohne Klick
tryWithoutGesture();
// Wichtig · Fallstricke
- Nutzergeste erforderlich: Ohne vorübergehende Nutzeraktivierung (z. B.
click) wird das Promise abgelehnt. Nicht beim Seitenladen aufrufen. - Sicherer Kontext: Nur über HTTPS (oder
localhost) verfügbar. - iframes: In eingebetteten Frames muss die Berechtigungsrichtlinie
idle-detectionerlaubt sein, z. B.<iframe allow="idle-detection">. - Kompatibilität: Experimentell; nur in Chromium-Browsern (ab Version 94). Firefox und Safari lehnen die API aus Datenschutzgründen ab – immer Feature-Erkennung mit
'IdleDetector' in windowverwenden. - Datenschutz: Inaktivitätsdaten können Rückschlüsse auf Gewohnheiten erlauben. Nur anfordern, wenn ein klarer Nutzen besteht, und dies dem Nutzer erklären. Die minimale
thresholdbeistart()beträgt 60 000 ms. - Einmal verweigert, fragt der Browser meist nicht erneut; der Nutzer muss die Berechtigung dann manuell in den Website-Einstellungen ändern.