Start · Sprachen · JavaScript · Referenz · PermissionStatus.name

PermissionStatus.name

Eigenschaft

Die schreibgeschützte Eigenschaft <code>name</code> gibt den Namen der Berechtigung zurück, deren Status ein <code>PermissionStatus</code>-Objekt beschreibt, z. B. <code>"geolocation"</code>.

seit JavaScript Moderne Browser: Chrome/Edge 97+, Firefox 93+, Saf Kategorie: webapi

Signatur

PermissionStatus.name

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

Typ
string
Beschreibung
Der Name der abgefragten Berechtigung, z. B. "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}`);
geolocation: prompt

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);
  }
}
geolocation → granted notifications → denied persistent-storage → prompt

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);
  }
}
Berechtigung "camera" ist jetzt: granted

// Wichtig · Fallstricke

  • Kompatibilität: Die Permissions API gibt es schon lange, die Eigenschaft name kam aber erst später dazu. In älteren Browsern (z. B. Chrome vor Version 97) ist sie undefined. 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 einem TypeError abgelehnt. Dann erhalten Sie gar kein PermissionStatus-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 }. In name steht 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.