Permissions: 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: Dieses Feature ist verfügbar in Web Workers.

Die query() Methode des Permissions Interface gibt den Status einer Benutzerberechtigung im globalen Scope zurück.

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

Die APIs, die durch jede Berechtigung gesteuert werden, sind in Berechtigungsbewusste APIs im Überblicksthema 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 camera, bluetooth, microphone, geolocation (sehen Sie sich Permissions für eine vollständigere Liste an). Das 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 unterstützt in Firefox — siehe den Abschnitt zur Browser-Unterstützung unten) Gibt an, ob Sie eine Benachrichtigung für jede Nachricht anzeigen oder stille Push-Benachrichtigungen senden möchten. Der Standardwert ist false.

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

sysex Optional

Gibt an, ob Sie System-exklusive Nachrichten 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 Browserkontext aufgerufen wird und das damit verbundene Dokument nicht vollständig aktiv ist.

TypeError

Wird ausgelöst, wenn das Abrufen der PermissionDescriptor Informationen auf irgendeine Weise fehlschlägt oder die Berechtigung nicht existiert oder von der Benutzeragent nicht unterstützt wird.

Beispiele

Nachrichten basierend auf Geolokalisierungsberechtigung anzeigen

Dieses Beispiel zeigt, wie Sie möglicherweise Nachrichten anzeigen, die sich auf den aktuellen Standort beziehen, wenn die geolocation-Berechtigung gewährt wird, und andernfalls den Benutzer auffordern, die Erteilung des Zugriffs auf den Standort zu ermöglichen.

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 der query() Aufruf innerhalb eines try...catch Blocks gemacht 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 {
    const result = await navigator.permissions.query({ name: permission });
    return `${permission}: ${result.state}`;
  } catch (error) {
    return `${permission} (not supported)`;
  }
}

Das Protokoll der Codeausführung wird unten gezeigt:

Spezifikationen

Specification
Permissions
# dom-permissions-query

Browser-Kompatibilität

BCD tables only load in the browser