Метод: requestStorageAccess()
Базовая версия 2023 *
Новое
С декабря 2023 года данная функция работает на последних версиях устройств и браузеров. Возможны проблемы с работой на более старых устройствах или браузерах.
* Некоторые части этой функции могут иметь разную степень поддержки.
Метод requestStorageAccess() интерфейса Document позволяет содержимому, загруженному в стороннем контексте (например, встроенному в <iframe>), запросить доступ к кукам сторонних сайтов и неразделенному состоянию. Это актуально для пользовательских агентов, которые по умолчанию блокируют доступ к сторонним, неразделенным кукам, чтобы повысить конфиденциальность (например, для предотвращения отслеживания), и является частью API доступа к хранилищу.
Чтобы проверить, предоставлено ли разрешение на доступ к кукам сторонних сайтов, можно вызвать Permissions.query(), указав имя функции "storage-access".
Примечание: Использование этой функции может быть заблокировано storage-access политики разрешений, установленной на вашем сервере. Кроме того, документ должен пройти дополнительные проверки, специфичные для браузера, такие как списки разрешенных и заблокированных ресурсов, классификация на устройстве, настройки пользователя, эвристики анти-кликджекинга или запрос явного разрешения у пользователя.
Синтаксис
requestStorageAccess() requestStorageAccess(types)
Параметры
typesНеобязательно-
Объект, содержащий свойства, контролирующие доступ к неразделенному состоянию. Если не указано, значение свойства по умолчанию
false. Доступные свойства:all-
Логическое значение, указывающее, что следует предоставить доступ ко всем возможным неразделенным состояниям.
-
Логическое значение, указывающее, что следует предоставить доступ к кукам сторонних сайтов.
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(). -
Логическое значение, указывающее, что следует предоставить доступ к
StorageAccessHandle.SharedWorker().
Возвращаемое значение
Обещание Promise, которое выполняется с undefined при получении доступа к кукам сторонних сайтов без параметра types, выполняется с StorageAccessHandle при получении доступа к неразделенному состоянию, запрошенному параметром types, и отказывается, если доступ был запрещен.
Запросы requestStorageAccess() автоматически отклоняются, если встраиваемое содержимое не обрабатывает пользовательское действие, такое как нажатие или клик (временная активация), или если разрешение уже было предоставлено ранее. Если разрешение не было предоставлено ранее, они должны быть выполнены внутри обработчика событий, основанного на пользовательском действии. Поведение пользовательского действия зависит от состояния обещания:
- Если обещание выполняется (т.е. разрешение предоставлено), то пользовательское действие не было использовано, поэтому скрипт может впоследствии вызывать API, требующие пользовательского действия.
- Если обещание отклоняется (т.е. разрешение не предоставлено), то пользовательское действие было использовано, поэтому скрипт не может выполнять действия, требующие действия пользователя. Это преднамеренная защита от злоупотреблений — она предотвращает выполнение скриптов
requestStorageAccess()в цикле до тех пор, пока пользователь не одобрит запрос.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если:
- Текущий
Documentеще не активен. - Параметр
typesуказан и все его свойства имеют значениеfalse.
- Текущий
-
NotAllowedErrorDOMException -
Выбрасывается, если:
- Окно документа не является безопасным контекстом.
- Использование заблокировано политикой разрешений
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 доступа к хранилищу.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | Нет |
См. также
© 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