Signatur
Beschreibung
PermissionStatus.name ist eine schreibgeschützte Zeichenkette. Sie enthält den Namen der Berechtigung, die Sie mit navigator.permissions.query() abgefragt haben, zum Beispiel "geolocation", "notifications", "camera", "microphone" oder "clipboard-read". Der Wert stimmt mit dem Feld name des übergebenen Deskriptor-Objekts überein.
Nützlich ist die Eigenschaft vor allem, wenn Sie mehrere Berechtigungen gleichzeitig abfragen und die Ergebnisse gemeinsam verarbeiten. Das gilt etwa für Promise.all() oder für einen einzigen change-Handler, der für mehrere PermissionStatus-Objekte registriert ist. Über event.target.name sehen Sie dann direkt, welche Berechtigung sich geändert hat. Sie müssen die Zuordnung also nicht selbst speichern.
Die Eigenschaft hat keine Parameter und lässt sich nicht verändern. Wenn Sie ihr einen Wert zuweisen, wird die Zuweisung ohne Fehlermeldung ignoriert (im Strict Mode gibt es einen TypeError). Den eigentlichen Zustand der Berechtigung liefert die Schwester-Eigenschaft state.
Rückgabewert
"geolocation", "notifications", "push", "camera", "microphone", "clipboard-read" oder "persistent-storage".Beispiele
Namen und Zustand einer Berechtigung ausgeben
const status = await navigator.permissions.query({ name: 'geolocation' });
console.log(`${status.name}: ${status.state}`);
Mehrere Berechtigungen parallel abfragen
const names = ['geolocation', 'notifications', 'persistent-storage'];
const results = await Promise.allSettled(
names.map((name) => navigator.permissions.query({ name }))
);
for (const result of results) {
if (result.status === 'fulfilled') {
const { name, state } = result.value;
console.log(`${name} → ${state}`);
} else {
console.warn('Nicht unterstützt:', result.reason.message);
}
}
Ein gemeinsamer change-Handler für mehrere Berechtigungen
const handleChange = (event) => {
const { name, state } = event.target;
console.log(`Berechtigung "${name}" ist jetzt: ${state}`);
document.querySelector(`[data-permission="${name}"]`)?.setAttribute('data-state', state);
};
for (const name of ['camera', 'microphone']) {
try {
const status = await navigator.permissions.query({ name });
status.addEventListener('change', handleChange);
} catch (err) {
console.warn(`${name} kann nicht abgefragt werden:`, err.message);
}
}
// Wichtig · Fallstricke
- Kompatibilität: Die Permissions API gibt es schon lange, die Eigenschaft
namekam aber erst später dazu. In älteren Browsern (z. B. Chrome vor Version 97) ist sieundefined. Wenn Sie ältere Browser unterstützen müssen, speichern Sie den Namen besser selbst, zum Beispiel als Rückfallwert:status.name ?? requestedName. - Nicht unterstützte Namen: Kennt der Browser einen Berechtigungsnamen nicht, wird das Promise von
navigator.permissions.query()mit einemTypeErrorabgelehnt. Dann erhalten Sie gar keinPermissionStatus-Objekt. Welche Namen unterstützt werden, unterscheidet sich stark zwischen Chrome, Firefox und Safari. Ein Beispiel ist"clipboard-read", das nur in Chromium-Browsern funktioniert. - Deskriptor-Zusätze: Einige Berechtigungen verlangen zusätzliche Felder im Deskriptor, etwa
{ name: 'push', userVisibleOnly: true }. Innamesteht trotzdem nur der Grundname ("push"). - Sicherer Kontext: Viele Berechtigungen lassen sich nur über HTTPS (Secure Context) sinnvoll abfragen.
- Die Eigenschaft ist schreibgeschützt. Den Zustand ändert der Browser, nicht Ihr Skript.