Расширения могут хранить файлы cookie и получать доступ к API веб-хранилища так же, как обычные сайты. Однако в некоторых случаях они работают в расширениях иначе.
Информацию об API расширений можно найти на странице browser.storage.
Хранилище
Часто в расширениях требуется использовать API хранилища веб-платформы. В этом разделе рассматривается поведение этих API в контексте расширения, которое иногда отличается от их поведения в интернете.
Сохранение
Хранилище расширения не очищается, когда пользователь удаляет данные о работе в браузере. Это относится к любым данным, хранящимся с помощью API веб-хранилища (например, локального хранилища и IndexedDB).
По умолчанию на расширения распространяются обычные ограничения квоты на хранилище, которые можно проверить, вызвав функцию navigator.storage.estimate(). Хранилище также может быть вытеснено при нехватке памяти, хотя это происходит редко. Чтобы этого избежать:
- Запросите разрешение
"unlimitedStorage", которое влияет на API хранилища расширений и веб-хранилища и освобождает расширения от ограничений квоты и вытеснения. - Позвоните по номеру
navigator.storage.persist(), чтобы получить защиту от выселения.
Хранилище расширения используется совместно с источником расширения, включая service worker расширения, любые страницы расширения (в том числе всплывающие окна и боковую панель) и скрытые документы. В скриптах для содержимого вызов API веб-хранилища позволяет получить доступ к данным с хост-страницы, на которую внедрен скрипт, а не из расширения.
Доступ в скриптах Service Worker
API IndexedDB и Cache Storage доступны в сервисных воркерах. Однако локальное хранилище и сеансовое хранилище не очищаются.
Если вам нужно получить доступ к локальному или сеансовому хранилищу из service worker, используйте неэкранный документ.
Сегментация товаров
Разделение – это добавление ключей к сохраненным данным, чтобы ограничить доступ к ним. Раньше хранилище было привязано к источнику.
Начиная с Chrome 115, разделение хранилища вносит изменения в определение ключей разделения, чтобы предотвратить определенные типы межсайтового отслеживания. На практике это означает, что если сайт А встраивает iframe с сайтом Б, то сайт Б не сможет получить доступ к тому же хранилищу, которое обычно доступно при прямом переходе на него.
Чтобы снизить влияние этого изменения на расширения, предусмотрены два исключения:
- Если страница со схемой
chrome-extension://встроена в какой-либо сайт, секционирование хранилища не применяется, и расширение получает доступ к разделу верхнего уровня. - Если на странице со схемой
chrome-extension://есть iframe, а у расширения есть разрешения на хост для сайта, который он встраивает, этот сайт также получит доступ к разделу верхнего уровня.
Файлы cookie
Файлы cookie позволяют хранить пары "ключ-значение", связанные с определенным доменом и путем. Они имеют ограниченную ценность для расширений, но понимание их поведения может быть полезным, если у вас есть определенный вариант использования или вы добавили сторонний скрипт, который использует их в своей реализации.
Безопасные файлы cookie
Атрибут cookie Secure поддерживается только для схемы https://. Поэтому страницы chrome-extension:// не могут устанавливать файлы cookie с этим атрибутом.
Это также означает, что страницы расширений не могут использовать другие атрибуты файлов cookie, где требуется атрибут Secure:
Разделение и поведение SameSite
Для файлов cookie, заданных на страницах chrome-extension://, всегда используется SameSite=Lax.
Таким образом, файлы cookie, установленные расширением в собственном источнике, никогда не будут доступны во фреймах, и разделение не имеет значения.
Файлы cookie, связанные со сторонними сайтами, например загруженными в фрейме на странице расширения или запрошенными со страницы расширения к стороннему источнику, работают так же, как и в интернете, за исключением двух случаев:
- Сторонние файлы cookie никогда не блокируются, даже во вложенных фреймах, если страница верхнего уровня для определенной вкладки является страницей
chrome-extension://. - Запросы из расширения к стороннему сайту считаются запросами к тому же сайту, если у расширения есть разрешения на хост для этого сайта. Это означает, что файлы cookie могут быть отправлены.
SameSite=StrictОбратите внимание, что это относится только к сетевым запросам, а не к доступу черезdocument.cookieв JavaScript, и не применяется, если сторонние файлы cookie заблокированы.
Обратите внимание, что настройки сторонних файлов cookie меняются в рамках проекта Privacy Sandbox и корректируются в соответствии с его планом.
API browser.cookies позволяет управлять ключом раздела, который используется с каждым методом API. Подробнее о документации по API…