拡張機能は、通常のウェブサイトと同様に、Cookie を保存し、ウェブ ストレージ API にアクセスできます。ただし、拡張機能では動作が異なる場合があります。
拡張機能 API については、chrome.storage
をご覧ください。
ストレージ
拡張機能でウェブ プラットフォーム ストレージ API を使用することが望ましい場合がよくあります。このセクションでは、拡張機能のコンテキストでのこれらの API の動作について説明します。拡張機能のコンテキストは、ウェブでの動作と異なる場合があります。
永続性
ユーザーが閲覧データを消去しても、拡張機能のストレージは消去されません。 これは、ウェブ ストレージ API(Local Storage や IndexedDB など)を使用して保存されるすべてのデータに適用されます。
デフォルトでは、拡張機能にはストレージに関する通常の割り当て制限が適用されます。この割り当ては、navigator.storage.estimate()
を呼び出して確認できます。また、メモリ負荷が高い場合にストレージが強制排除されることがありますが、これはまれです。これを回避するには:
"unlimitedStorage"
権限をリクエストします。この権限は、拡張機能とウェブ ストレージ API の両方に影響し、割り当て制限とエビクションの両方から拡張機能を除外します。- エビクションから保護するには、
navigator.storage.persist()
を呼び出します。
拡張機能ストレージは、拡張機能 Service Worker、拡張機能ページ(ポップアップとサイドパネルを含む)、画面外のドキュメントなど、拡張機能のオリジン全体で共有されます。コンテンツ スクリプトでウェブ ストレージ API を呼び出すと、拡張機能ではなく、コンテンツ スクリプトが挿入されたホストページからデータにアクセスします。
Service Worker でのアクセス
Service Worker で IndexedDB API と Cache Storage API にアクセスできます。ただし、ローカル ストレージとセッション ストレージは違います。
Service Worker からローカル ストレージまたはセッション ストレージにアクセスする必要がある場合は、画面外のドキュメントを使用します。
パーティショニング
パーティショニングでは、保存データ用のキーを導入して、アクセス可能な場所を制限します。ストレージはこれまで、送信元を基準としてきました。
Chrome 115 以降では、特定のタイプのクロスサイト トラッキングを防ぐために、ストレージ パーティショニングでパーティショニング キーの定義方法が変更されました。つまり、サイト A にサイト B を含む iframe が埋め込まれている場合、サイト B は、直接移動したときと同じストレージにアクセスできなくなります。
延長による影響を軽減するために、次の 2 つの例外が適用されます。
chrome-extension://
スキームを使用するページがサイトに埋め込まれている場合、ストレージ パーティショニングは適用されず、拡張機能はそのトップレベル パーティションにアクセスできます。chrome-extension://
スキームを使用するページに iframe があり、拡張機能に埋め込みサイトのホスト権限がある場合、そのサイトも最上位のパーティションにアクセスできます。
クッキー
Cookie は、特定のドメインとパスに関連付けられた Key-Value ペアを保存するための手段です。拡張機能で得られる価値は限られていますが、特定のユースケースがある場合や、拡張機能を使用するサードパーティのスクリプトをバンドルしている場合は、拡張機能の動作を理解していると役立ちます。
安全な Cookie
Secure
Cookie 属性は、https://
スキームでのみサポートされています。そのため、chrome-extension://
ページでは、この属性を使用して Cookie を設定することはできません。
また、拡張機能のページでは、Secure
属性が必要な他の Cookie 属性を使用できません。
パーティショニングと SameSite の動作
chrome-extension:// ページに設定された Cookie では常に SameSite=Lax
が使用されます。
したがって、拡張機能が独自のオリジンで設定された Cookie がフレーム内でアクセスされることはできず、パーティショニングは関係ありません。
サードパーティのサイトに関連付けられた Cookie(拡張機能ページのフレームに読み込まれたサードパーティ サイト、または拡張ページからサードパーティのオリジンへのリクエストなど)の場合、Cookie は次の 2 つの点を除き、ウェブと同じように動作します。
- 特定のタブの最上位ページが
chrome-extension://
ページである場合、サブフレームでもサードパーティ Cookie がブロックされることはありません。 - 拡張機能からサードパーティへのリクエストは、拡張機能にサードパーティのホスト権限がある場合、同一サイトとして扱われます。つまり、
SameSite=Strict
Cookie を送信できます。これはネットワーク リクエストにのみ適用され、JavaScript でdocument.cookie
を介したアクセスには適用されません。また、サードパーティ Cookie がブロックされている場合には適用されません。
なお、サードパーティ Cookie に関する設定は、プライバシー サンドボックスの仕組みの影響を受け、そのスケジュールに沿って調整されます。
chrome.cookies
API では、各 API メソッドで使用するパーティション キーを制御できます。詳細については、API リファレンスをご覧ください。