Signatur
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
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();
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);
}
});
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);
// 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.enableinabout:config. Vor jedem Aufruf mit'revoke' in navigator.permissionsprü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öffneterMediaStream. 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).