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
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
(siehePermissions
für eine vollständigere Liste). Das zurückgegebenePromise
wird mit einemTypeError
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.
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.
// 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 |