Berechtigungen: `query()`-Methode

Baseline 2022
Newly available

Since September 2022, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

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

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

Die Namen der Benutzerberechtigungen sind in den jeweiligen Spezifikationen für jede Funktion definiert. Die Berechtigungen, die von verschiedenen Browserversionen unterstützt werden, 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 jeweils durch Berechtigungen gesteuert werden, sind in Berechtigungsbewusste APIs im Permissions API Überblicksthema aufgeführt.

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.

Jede Berechtigung hat einen Namen:

name

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

Für die push-Berechtigungen können Sie auch Folgendes angeben:

userVisibleOnly Optional

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

Für die midi-Berechtigung können Sie auch Folgendes angeben:

sysex Optional

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

Rückgabewert

Ein Promise, das zu einem PermissionStatus-Objekt aufgelöst wird.

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 Standortberechtigung anzeigen

Dieses Beispiel zeigt, wie Sie möglicherweise Nachrichten in Bezug auf den aktuellen Standort anzeigen, wenn die geolocation-Berechtigung erteilt wird. Andernfalls wird der Benutzer aufgefordert, 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 entweder den Berechtigungsstatus zu protokollieren 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 abgelehnt 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 ausgeführten Codes wird unten angezeigt:

Spezifikationen

Specification
Permissions
# dom-permissions-query

Browser-Kompatibilität

BCD tables only load in the browser