Spec-Zone.ru › Web APIs

Разрешения: метод 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.

Исключения

InvalidStateError DOMException

Выбрасывается, если метод 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API