Хранилище и файлы cookie

Расширения могут хранить файлы 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…