Pamięć i pliki cookie

Rozszerzenia mogą przechowywać pliki cookie i korzystać z internetowych interfejsów API pamięci masowej podobnie jak zwykła witryna. Jednak w niektórych przypadkach w rozszerzeniach zachowują się one inaczej.

Więcej informacji o interfejsie API rozszerzenia znajdziesz na stronie chrome.storage.

Miejsce na dane

Często warto używać w rozszerzeniach interfejsów API pamięci masowej platformy internetowej. W tej sekcji omawiamy zachowanie tych interfejsów API w kontekście rozszerzenia, który może czasami różnić się w zależności od ich działania w internecie.

Trwałość

Pamięć rozszerzenia nie jest czyszczona, gdy użytkownik wyczyści dane przeglądania. Dotyczy to wszystkich danych przechowywanych przy użyciu interfejsów Web Storage API (takich jak Local Storage i IndexedDB).

Domyślnie rozszerzenia podlegają normalnym limitom miejsca na dane, które można sprawdzić, wywołując navigator.storage.estimate(). Z powodu dużego obciążenia pamięci pamięć może zostać zwolniona, ale jest to rzadkie. Aby tego uniknąć:

  • Poproś o uprawnienie "unlimitedStorage", które ma wpływ zarówno na interfejsy API rozszerzeń i pamięci internetowej, jak i wyklucza rozszerzenia z obowiązku ograniczania limitów oraz usuwania z niej.
  • Wywołaj navigator.storage.persist(), aby zabezpieczyć się przed usunięciem trwale.

Pamięć rozszerzeń jest współdzielona przez źródło rozszerzenia, m.in. przez skrypt usługi rozszerzeń, wszystkie strony rozszerzeń (w tym wyskakujące okienka i panel boczny) oraz dokumenty poza ekranem. Wywoływanie w skryptach treści internetowych interfejsów API pamięci masowej uzyskuje dostęp do danych ze strony hosta, na której wstrzyknięty jest skrypt treści, a nie do rozszerzenia.

Dostęp w skryptach service worker

Interfejsy API IndexedDB i Cache Storage są dostępne w mechanizmach Service Worker. Pamięć lokalna i Pamięć sesji już nie.

Jeśli potrzebujesz dostępu do pamięci lokalnej lub pamięci sesji z poziomu skryptu service worker, użyj dokumentu nieekranowego.

Partycjonowanie

Partycjonowanie polega na wprowadzaniu kluczy do przechowywanych danych w celu ograniczenia miejsc, w których można uzyskać do nich dostęp. W przypadku pamięci masowej w przypadku pamięci masowej kluczowano według źródła.

Począwszy od Chrome 115 partycjonowanie miejsca na dane wprowadza zmiany w sposobie definiowania kluczy partycjonowania, aby zapobiec niektórych rodzajom śledzenia w witrynach. W praktyce oznacza to, że jeśli w witrynie A umieszczono element iframe zawierający witrynę B, witryna B nie będzie miała dostępu do tego samego miejsca na dane, co zwykle po przejściu do niej bezpośrednio.

Aby ograniczyć wpływ tej zmiany w przypadku rozszerzeń, obowiązują 2 wyjątki:

  • Jeśli w dowolnej witrynie jest umieszczona strona o schemacie chrome-extension://, partycjonowanie pamięci nie będzie działać, a rozszerzenie będzie mieć dostęp do partycji najwyższego poziomu.
  • Jeśli strona o schemacie chrome-extension:// zawiera element iframe, a rozszerzenie ma uprawnienia hosta w przypadku umieszczonej witryny, ta witryna będzie też miała dostęp do partycji najwyższego poziomu.

Ciastka

Pliki cookie umożliwiają przechowywanie par klucz-wartość powiązanych z konkretną domeną i ścieżką. Rozszerzenia mają ograniczoną wartość, ale zrozumienie ich działania może być przydatne, jeśli masz konkretny przypadek użycia lub masz w pakiecie zewnętrzny skrypt, który używa ich do implementacji.

Bezpieczne pliki cookie

Atrybut pliku cookie Secure jest obsługiwany tylko przez schemat https://. Oznacza to, że strony chrome-extension:// nie mogą ustawiać plików cookie z tym atrybutem.

Oznacza to też, że strony z rozszerzeniami nie mogą używać innych atrybutów plików cookie, w których wymagany jest atrybut Secure:

Partycjonowanie i zachowanie SameSite

Pliki cookie ustawione na stronach chrome-extension:// zawsze używają SameSite=Lax. W związku z tym pliki cookie ustawiane przez rozszerzenie z własnego źródła nie są nigdy dostępne w ramkach, a partycjonowanie nie ma zastosowania.

W przypadku plików cookie powiązanych z witrynami zewnętrznymi, np. z witryn zewnętrznych wczytywanych w ramce na stronie rozszerzenia lub żądań wysyłanych ze strony rozszerzenia do stron zewnętrznych, pliki cookie zachowują się tak samo jak internet, ale różnią się między innymi:

  • Pliki cookie innych firm nigdy nie są blokowane w ramkach podrzędnych, jeśli strona najwyższego poziomu danej karty jest stroną chrome-extension://.
  • Żądania z rozszerzenia wysyłane do innej firmy są traktowane jak żądania z tej samej witryny, jeśli rozszerzenie ma uprawnienia do hosta w przypadku firmy zewnętrznej. Oznacza to, że mogą być wysyłane SameSite=Strict pliki cookie. Pamiętaj, że dotyczy to tylko żądań sieciowych, a nie dostępu przez document.cookie w JavaScript. Nie dotyczy też blokowania plików cookie innych firm.

Pamiętaj, że ustawienia dotyczące plików cookie innych firm zależą od działania Piaskownicy prywatności i są korygowane zgodnie z harmonogramem.

Interfejs API chrome.cookies zapewnia kontrolę nad kluczem partycji na potrzeby poszczególnych metod API. Więcej informacji znajdziesz w dokumentacji interfejsu API.