Berechtigungen: `query()` Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2022.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die query() Methode der Permissions Schnittstelle gibt den Status einer Benutzerberechtigung im globalen Umfang zurück.

Die Namen von Benutzerberechtigungen sind in den jeweiligen Spezifikationen für jede Funktion definiert. Die von verschiedenen Browserversionen unterstützten Berechtigungen sind in den Kompatibilitätsdaten der Permissions-Schnittstelle aufgelistet (siehe auch den relevanten Quellcode für Firefox-Werte, Chromium-Werte und WebKit-Werte).

Die APIs, die durch jede Berechtigung gesteuert werden, sind in Berechtigungsbewusste APIs im Übersichtsthema der Permissions-API aufgelistet.

Syntax

js
query(permissionDescriptor)

Parameter

permissionDescriptor

Ein Objekt, das Optionen für die query-Operation festlegt. Die verfügbaren Optionen für diesen Deskriptor hängen vom Berechtigungstyp ab.

Alle Berechtigungen haben einen Namen:

name

Ein String, der den Namen der API enthält, deren Berechtigungen Sie abfragen möchten, wie z.B. camera, bluetooth, microphone, geolocation (siehe Permissions für eine vollständigere Liste). Das zurückgegebene Promise wird mit einem TypeError abgelehnt, wenn der Berechtigungsname vom Browser nicht unterstützt wird.

Für die push Berechtigung können Sie auch festlegen:

userVisibleOnly Optional

(Nur Push, nicht unterstützt in Firefox — siehe den Abschnitt Browser-Unterstützung unten) Gibt an, ob Sie für jede Nachricht eine Benachrichtigung anzeigen oder stille Push-Benachrichtigungen senden möchten. Der Standardwert ist false.

Für die midi Berechtigung können Sie auch festlegen:

sysex Optional

Gibt an, ob Sie System exklusive Nachrichten benötigen und/oder empfangen. Der Standardwert ist false.

Rückgabewert

Ein Promise, das sich auf ein PermissionStatus Objekt auflöst.

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn die query()-Methode im Browsing-Kontext aufgerufen wird und das zugehörige Dokument nicht vollständig aktiv ist.

TypeError

Wird ausgelöst, wenn das Abrufen der PermissionDescriptor-Informationen auf irgendeine Weise fehlgeschlagen ist oder die Berechtigung nicht existiert oder vom Benutzeragenten nicht unterstützt wird.

Beispiele

Nachrichten basierend auf der Geolokalisierungsberechtigung anzeigen

Dieses Beispiel zeigt, wie Sie möglicherweise Nachrichten im Zusammenhang mit dem aktuellen Standort anzeigen, wenn die geolocation-Berechtigung erteilt wird, und ansonsten den Benutzer auffordern, den Zugriff auf den Standort zu gewähren.

js
navigator.permissions.query({ name: "geolocation" }).then((result) => {
  if (result.state === "granted") {
    showLocalNewsWithGeolocation();
  } else if (result.state === "prompt") {
    showButtonToEnableLocalNews();
  }
  // Don't do anything if the permission was denied.
});

Unterstützung für verschiedene Berechtigungen testen

Dieses Beispiel zeigt das Ergebnis der Abfrage jeder der Berechtigungen.

Der Code verwendet navigator.permissions.query(), um jede Berechtigung abzufragen, und protokolliert entweder den Berechtigungsstatus oder die Tatsache, dass die Berechtigung im Browser nicht unterstützt wird. Beachten Sie, dass query() innerhalb eines try...catch Blocks aufgerufen wird, da das zugehörige Promise abgelegt wird, wenn die Berechtigung nicht unterstützt wird.

js
// Array of permissions
const permissions = [
  "accelerometer",
  "accessibility-events",
  "ambient-light-sensor",
  "background-sync",
  "camera",
  "clipboard-read",
  "clipboard-write",
  "geolocation",
  "gyroscope",
  "local-fonts",
  "magnetometer",
  "microphone",
  "midi",
  "notifications",
  "payment-handler",
  "persistent-storage",
  "push",
  "screen-wake-lock",
  "storage-access",
  "top-level-storage-access",
  "window-management",
];

processPermissions();

// Iterate through the permissions and log the result
async function processPermissions() {
  for (const permission of permissions) {
    const result = await getPermission(permission);
    log(result);
  }
}

// Query a single permission in a try...catch block and return result
async function getPermission(permission) {
  try {
    let result;
    if (permission === "top-level-storage-access") {
      result = await navigator.permissions.query({
        name: permission,
        requestedOrigin: window.location.origin,
      });
    } else {
      result = await navigator.permissions.query({ name: permission });
    }
    return `${permission}: ${result.state}`;
  } catch (error) {
    return `${permission} (not supported)`;
  }
}

Das Protokoll des Ausführens des Codes wird unten angezeigt:

Spezifikationen

Specification
Permissions
# dom-permissions-query

Browser-Kompatibilität