Spec-Zone.ru › Web APIs

Метод: requestStorageAccess()

Базовая версия 2023 *
Новое

С декабря 2023 года данная функция работает на последних версиях устройств и браузеров. Возможны проблемы с работой на более старых устройствах или браузерах.

* Некоторые части этой функции могут иметь разную степень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Метод requestStorageAccess() интерфейса Document позволяет содержимому, загруженному в стороннем контексте (например, встроенному в <iframe>), запросить доступ к кукам сторонних сайтов и неразделенному состоянию. Это актуально для пользовательских агентов, которые по умолчанию блокируют доступ к сторонним, неразделенным кукам, чтобы повысить конфиденциальность (например, для предотвращения отслеживания), и является частью API доступа к хранилищу.

Чтобы проверить, предоставлено ли разрешение на доступ к кукам сторонних сайтов, можно вызвать Permissions.query(), указав имя функции "storage-access".

Примечание: Использование этой функции может быть заблокировано storage-access политики разрешений, установленной на вашем сервере. Кроме того, документ должен пройти дополнительные проверки, специфичные для браузера, такие как списки разрешенных и заблокированных ресурсов, классификация на устройстве, настройки пользователя, эвристики анти-кликджекинга или запрос явного разрешения у пользователя.

Синтаксис

requestStorageAccess()
requestStorageAccess(types)

Параметры

types Необязательно

Объект, содержащий свойства, контролирующие доступ к неразделенному состоянию. Если не указано, значение свойства по умолчанию false. Доступные свойства:

all

Логическое значение, указывающее, что следует предоставить доступ ко всем возможным неразделенным состояниям.

cookies

Логическое значение, указывающее, что следует предоставить доступ к кукам сторонних сайтов.

sessionStorage

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.sessionStorage.

localStorage

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.localStorage.

indexedDB

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.indexedDB.

locks

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.locks.

caches

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.caches.

getDirectory

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.getDirectory().

estimate

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.estimate().

createObjectURL

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.createObjectURL().

revokeObjectURL

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.revokeObjectURL().

BroadcastChannel

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.BroadcastChannel().

SharedWorker

Логическое значение, указывающее, что следует предоставить доступ к StorageAccessHandle.SharedWorker().

Возвращаемое значение

Обещание Promise, которое выполняется с undefined при получении доступа к кукам сторонних сайтов без параметра types, выполняется с StorageAccessHandle при получении доступа к неразделенному состоянию, запрошенному параметром types, и отказывается, если доступ был запрещен.

Запросы requestStorageAccess() автоматически отклоняются, если встраиваемое содержимое не обрабатывает пользовательское действие, такое как нажатие или клик (временная активация), или если разрешение уже было предоставлено ранее. Если разрешение не было предоставлено ранее, они должны быть выполнены внутри обработчика событий, основанного на пользовательском действии. Поведение пользовательского действия зависит от состояния обещания:

  • Если обещание выполняется (т.е. разрешение предоставлено), то пользовательское действие не было использовано, поэтому скрипт может впоследствии вызывать API, требующие пользовательского действия.
  • Если обещание отклоняется (т.е. разрешение не предоставлено), то пользовательское действие было использовано, поэтому скрипт не может выполнять действия, требующие действия пользователя. Это преднамеренная защита от злоупотреблений — она предотвращает выполнение скриптов requestStorageAccess() в цикле до тех пор, пока пользователь не одобрит запрос.

Исключения

InvalidStateError DOMException

Выбрасывается, если:

  • Текущий Document еще не активен.
  • Параметр types указан и все его свойства имеют значение false.
NotAllowedError DOMException

Выбрасывается, если:

  • Окно документа не является безопасным контекстом.
  • Использование заблокировано политикой разрешений storage-access.
  • У документа или верхнеуровневого документа есть null источник.
  • Встраиваемый <iframe> имеет параметр sandbox, и токен allow-storage-access-by-user-activation не установлен.
  • Использование запрещено запросом разрешения пользователя для использования API.

Примеры

document.requestStorageAccess().then(
  () => {
    console.log("cookie access granted");
  },
  () => {
    console.log("cookie access denied");
  },
);

document.requestStorageAccess({ localStorage: true }).then(
  (handle) => {
    console.log("localStorage access granted");
    handle.localStorage.setItem("foo", "bar");
  },
  () => {
    console.log("localStorage access denied");
  },
);

Примечание: Подробнее см. в Использование API доступа к хранилищу.

Спецификации

Спецификация
API доступа к хранилищу
# dom-document-requeststorageaccess

Совместимость с браузерами

Рабочий стол Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
requestStorageAccess 119 85 65 105
11.1Разрешение доступа к хранилищу на уровне страницы (см. объяснение)
120 65 80
11.3Разрешение доступа к хранилищу на уровне страницы (см. объяснение)
25.0 Нет
types_parameter 125 Нет Нет 111 Нет 125 Нет 83 Нет 27.0 Нет

См. также

  • Document.hasStorageAccess(), Document.hasUnpartitionedCookieAccess(), Document.requestStorageAccessFor()
  • Использование API доступа к хранилищу
  • Представление API доступа к хранилищу (блог WebKit)

© 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/Document/requestStorageAccess

Spec-Zone.ru

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