Start · Sprachen · JavaScript · Referenz · IdleDetector.requestPermission()

IdleDetector.requestPermission()

Methode

Statische Methode, die den Nutzer um Erlaubnis für die Idle-Erkennung bittet und ein Promise mit <code>"granted"</code> oder <code>"denied"</code> liefert.

seit JavaScript Chromium 94+ (Chrome, Edge, Opera); experimentell, Kategorie: webapi

Signatur

IdleDetector.requestPermission()

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

Typ
Promise<"granted" | "denied">
Beschreibung
Ein Promise, das mit "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.');
});
Idle-Erkennung läuft. Nutzer: idle, Bildschirm: unlocked

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');
});
Abwesenheitsstatus aktiviert

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();
NotAllowedError: Must be handling a user gesture to show a permission request.

// 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-detection erlaubt 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 window verwenden.
  • 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 threshold bei start() 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.