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