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 des Permissions
-Interfaces gibt den Status einer Benutzerberechtigung im globalen Kontext zurück.
Die Benutzerberechtigungsnamen sind in den jeweiligen Spezifikationen für jedes Feature definiert. Die von verschiedenen Browserversionen unterstützten Berechtigungen sind in den Kompatibilitätsdaten des Permissions
-Interfaces 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 den Berechtigungsbewussten APIs im Überblicksthema 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 Descriptor 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 zum Beispiel
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
-Berechtigungen können Sie auch angeben:userVisibleOnly
Optional-
(Nur Push, nicht in Firefox unterstützt — siehe unten den Abschnitt "Browserunterstützung") Gibt an, ob Sie eine Benachrichtigung für jede Nachricht anzeigen möchten oder in der Lage sein möchten, stille Push-Benachrichtigungen zu senden. Der Standardwert ist
false
.
Für die
midi
-Berechtigung können Sie auch angeben:sysex
Optional-
Gibt an, ob Sie System-exklusive Nachrichten benötigen und/oder empfangen. Der Standardwert ist
false
.
Rückgabewert
Ein Promise
, das sich zu einem PermissionStatus
-Objekt auflöst.
Ausnahmen
InvalidStateError
DOMException
-
Wird ausgelöst, wenn die
query()
-Methode im Browsing-Kontext aufgerufen wird und ihr zugehöriges Dokument nicht vollständig aktiv ist. TypeError
-
Wird ausgelöst, wenn das Abrufen der
PermissionDescriptor
-Informationen aus irgendeinem Grund fehlgeschlagen ist oder die Berechtigung nicht existiert oder vom Benutzeragenten nicht unterstützt wird.
Beispiele
>Nachrichten basierend auf Geolokalisierungsberechtigung anzeigen
Dieses Beispiel zeigt, wie Sie möglicherweise Nachrichten im Zusammenhang mit dem aktuellen Standort anzeigen, wenn die geolocation
-Berechtigung gewährt wird, und den Benutzer andernfalls 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 Berechtigung.
Der Code verwendet navigator.permissions.query()
, um jede Berechtigung abzufragen und entweder den Berechtigungsstatus oder die Tatsache zu protokollieren, 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)`;
}
}
Die Aufzeichnung der Ausführung des Codes wird unten gezeigt:
Spezifikationen
Specification |
---|
Permissions> # dom-permissions-query> |
Browser-Kompatibilität
Loading…