Berechtigungen: `query()`-Methode
Baseline 2022Newly 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
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
(siehePermissions
für eine vollständigere Liste). Die zurückgegebenePromise
wird mit einemTypeError
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.
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.
// 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