Start · Sprachen · JavaScript · Referenz · Permissions.revoke()

Permissions.revoke()

Methode

Setzt eine erteilte oder verweigerte Berechtigung auf ihren Standardzustand (meist <code>"prompt"</code>) zurück und liefert ein Promise mit dem neuen <code>PermissionStatus</code>.

seit JavaScript Veraltet, nicht standardisiert – in aktuellen Brow deprecated seit ja Kategorie: webapi

Signatur

Permissions.prototype.revoke(permissionDescriptor)

Beschreibung

Mit navigator.permissions.revoke() sollte eine Webanwendung eine Berechtigung, die der Nutzer ihr erteilt oder verweigert hat, selbst zurücksetzen können, etwa den Zugriff auf den Standort oder auf Benachrichtigungen. Danach ist die Berechtigung wieder im Standardzustand, in der Regel "prompt". Beim nächsten Zugriff fragt der Browser den Nutzer also erneut.

Gedacht war das für Einstellungsseiten mit einem Schalter wie „Standortzugriff entziehen“. So hätte der Nutzer nicht erst die Website-Einstellungen des Browsers öffnen müssen. Die Methode erwartet dasselbe Deskriptor-Objekt wie Permissions.query() und liefert ein Promise, das mit einem PermissionStatus erfüllt wird.

Wichtig: Die Methode wurde aus der Spezifikation entfernt und wird von keinem aktuellen Browser unterstützt. Firefox hat sie kurz angeboten und dann hinter die Einstellung dom.permissions.revoke.enable verschoben. In Chromium war sie nur experimentell verfügbar. Für Produktivcode sollte man revoke() nicht verwenden. Man kann nur vorher prüfen, ob sie existiert, und sonst auf die Browser-Einstellungen verweisen.

Parameter

Name Typ Default Beschreibung
$permissionDescriptor Pflicht PermissionDescriptor (Object) Objekt, das die Berechtigung beschreibt. Pflichtfeld ist name, z. B. "geolocation", "notifications", "push" oder "midi". Für "push" gibt es zusätzlich userVisibleOnly (boolean), für "midi" zusätzlich sysex (boolean).

Rückgabewert

Typ
Promise<PermissionStatus>
Beschreibung
Promise, das mit einem PermissionStatus-Objekt erfüllt wird. Dessen state zeigt den neuen Zustand, meist "prompt". Bei einem unbekannten oder ungültigen name wird das Promise mit einem TypeError abgelehnt.

Beispiele

Standortberechtigung zurücksetzen (mit Feature-Erkennung)

const revokeGeolocation = async () => {
  // revoke() gibt es in aktuellen Browsern nicht – deshalb zuerst prüfen
  if (!navigator.permissions || typeof navigator.permissions.revoke !== 'function') {
    console.warn('revoke() wird nicht unterstützt – bitte in den Browser-Einstellungen zurücksetzen.');
    return null;
  }
  const status = await navigator.permissions.revoke({ name: 'geolocation' });
  console.log(`Neuer Zustand: ${status.state}`);
  return status;
};

revokeGeolocation();
revoke() wird nicht unterstützt – bitte in den Browser-Einstellungen zurücksetzen. // bzw. mit aktivierter Unterstützung: Neuer Zustand: prompt

Schalter „Benachrichtigungen deaktivieren“ auf einer Einstellungsseite

const button = document.querySelector('#notifications-off');

button.addEventListener('click', async () => {
  const descriptor = { name: 'notifications' };
  try {
    const before = await navigator.permissions.query(descriptor);
    if (before.state === 'prompt') {
      console.log('Keine Berechtigung gesetzt – nichts zu tun.');
      return;
    }
    if ('revoke' in navigator.permissions) {
      const after = await navigator.permissions.revoke(descriptor);
      console.log(`Vorher: ${before.state}, nachher: ${after.state}`);
    } else {
      alert('Bitte entziehe die Berechtigung über das Schloss-Symbol in der Adressleiste.');
    }
  } catch (err) {
    console.error('Fehler beim Zurücksetzen:', err);
  }
});
Vorher: granted, nachher: prompt

Push-Berechtigung mit zusätzlichem Deskriptor-Feld

const resetPush = async () => {
  if (!('revoke' in navigator.permissions)) return 'nicht unterstützt';
  const status = await navigator.permissions.revoke({
    name: 'push',
    userVisibleOnly: true
  });
  return status.state;
};

resetPush().then(console.log);
nicht unterstützt

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: Die Methode wurde aus der Spezifikation „Permissions“ entfernt. Chrome, Edge und Safari unterstützen sie nicht. Firefox bietet sie nur über die Einstellung dom.permissions.revoke.enable in about:config. Vor jedem Aufruf mit 'revoke' in navigator.permissions prüfen, ob sie existiert.
  • Ohne Feature-Erkennung wirft der Aufruf einen TypeError: navigator.permissions.revoke is not a function.
  • Nach dem Zurücksetzen ist die Berechtigung nicht „verweigert“, sondern wieder im Zustand "prompt". Der nächste Zugriff löst also erneut eine Nachfrage beim Nutzer aus.
  • Laufende Zugriffe werden nicht automatisch beendet, etwa ein aktives watchPosition() oder ein geöffneter MediaStream. Diese muss man selbst stoppen.
  • Für Kamera und Mikrofon gibt es einen Ersatz: Die Spuren mit MediaStreamTrack.stop() beenden. Ansonsten bleibt nur der Hinweis auf die Website-Einstellungen des Browsers.
  • Die Permissions-API gibt es nur in sicheren Kontexten (HTTPS oder localhost).