Разрешения: метод query()
Базовая версия 2022
Новое
С сентября 2022 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на старых устройствах или браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод query() интерфейса Permissions возвращает состояние разрешения пользователя в глобальной области видимости.
Имена разрешений пользователя определены в соответствующих спецификациях для каждой функции. Разрешения, поддерживаемые различными версиями браузеров, перечислены в данных совместимости интерфейса Permissions (также см. соответствующий исходный код для Firefox, Chromium и WebKit).
API, ограниченные каждым разрешением, перечислены в API, учитывающие разрешения в обзоре API разрешений.
Синтаксис
query(permissionDescriptor)
Параметры
permissionDescriptor-
Объект, задающий параметры для операции
query. Доступные параметры этого описателя зависят от типа разрешения.Все разрешения имеют имя:
name-
Строка, содержащая имя API, разрешение которого вы хотите запросить, например
camera,bluetooth,microphone,geolocation(см.Permissionsдля более полного списка). ВозвращаемыйPromiseбудет отклонен сTypeError, если имя разрешения не поддерживается браузером.
Для разрешений
pushвы также можете указать:userVisibleOnlyНеобязательно-
(Только для push-уведомлений, не поддерживается в Firefox — см. раздел Поддержка браузеров ниже) Указывает, хотите ли вы отображать уведомление для каждого сообщения или отправлять тихие push-уведомления. По умолчанию
false.
Для разрешения
midiвы также можете указать:sysexНеобязательно-
Указывает, нужны ли вам и/или вы получаете системные эксклюзивные сообщения. По умолчанию
false.
Возвращаемое значение
Объект Promise, который разрешается в объект PermissionStatus.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если метод
query()вызывается в контексте просмотра, а связанный документ не полностью активен. TypeError-
Выбрасывается, если получение информации о
PermissionDescriptorпо каким-либо причинам не удалось, или разрешение не существует или не поддерживается пользовательским агентом.
Примеры
Отображение новостей на основе разрешения геолокации
В этом примере показано, как отображать новости, связанные с текущим местоположением, если разрешение geolocation предоставлено, а в противном случае запросить у пользователя разрешение на доступ к местоположению.
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.
});
Проверка поддержки различных разрешений
В этом примере показан результат запроса каждого из разрешений.
Код использует navigator.permissions.query() для запроса каждого разрешения, регистрируя либо статус разрешения, либо тот факт, что разрешение не поддерживается в браузере. Обратите внимание, что query() вызывается внутри блока try...catch, потому что связанный Promise будет отклонен, если разрешение не поддерживается.
// 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)`;
}
}
Ниже показан лог, полученный при запуске кода:
Спецификации
| Спецификация |
|---|
| Разрешения # dom-permissions-query |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
query |
43 | 79 | 46 | 30 | 16 | 43 | 46 | 30 | 16 | 4.0 | Нет |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Permissions/query