拡張機能は、通常のウェブサイトと同様に Cookie を保存し、ウェブ ストレージ API にアクセスできます。ただし、拡張機能では動作が異なる場合があります。
拡張機能 API については、browser.storage をご覧ください。
ストレージ
拡張機能でウェブ プラットフォーム ストレージ API を使用することが望ましい場合があります。このセクションでは、拡張機能のコンテキストにおけるこれらの API の動作について説明します。この動作は、ウェブ上での動作と異なる場合があります。
永続性
ユーザーが閲覧データを消去しても、拡張機能のストレージは消去されません。これは、ウェブ ストレージ API(ローカル ストレージや IndexedDB など)を使用して保存されたすべてのデータに適用されます。
デフォルトでは、拡張機能にはストレージに関する通常の割り当て制限が適用されます。この制限は navigator.storage.estimate() を呼び出すことで確認できます。まれに、メモリの負荷が高い場合にストレージが削除されることもあります。これを回避するには:
"unlimitedStorage"権限をリクエストします。この権限は拡張機能とウェブ ストレージ API の両方に影響し、拡張機能を割り当て制限と削除の両方から除外します。- 立ち退きから保護するために
navigator.storage.persist()に電話してください。
拡張機能のストレージは、拡張機能のオリジン全体で共有されます。これには、拡張機能の Service Worker、拡張機能のページ(ポップアップやサイドパネルを含む)、オフスクリーン ドキュメントが含まれます。コンテンツ スクリプトでウェブ ストレージ API を呼び出すと、拡張機能ではなく、コンテンツ スクリプトが挿入されたホストページのデータにアクセスします。
サービス ワーカーでのアクセス
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 の動作は、ウェブの場合とほぼ同じですが、次の 2 点が異なります。
- 特定のタブのトップレベル ページが
chrome-extension://ページの場合、サードパーティ Cookie はサブフレームでもブロックされません。 - 拡張機能がサードパーティのホスト権限を持っている場合、拡張機能からサードパーティへのリクエストは同一サイトとして扱われます。つまり、
SameSite=StrictCookie を送信できます。これはネットワーク リクエストにのみ適用され、JavaScript のdocument.cookieを介したアクセスには適用されません。また、サードパーティ Cookie がブロックされている場合は適用されません。
サードパーティ Cookie に関する設定は、プライバシー サンドボックスの取り組みの影響を受け、そのタイムラインに沿って調整されます。
browser.cookies API は、各 API メソッドで使用するパーティション キーを制御します。詳しくは、API リファレンスをご覧ください。