--- title: Document.requestStorageAccess() slug: Web/API/Document/requestStorageAccess tags: - API - DOM - Document - Experimental - Reference - Storage Access API - requestStorageAccess - メソッド translation_of: Web/API/Document/requestStorageAccess ---
{{APIRef}}

requestStorageAccess() は {{domxref("Document")}} インターフェイスのメソッドで、ファーストパーティのストレージへのアクセスが許可されたら解決し、アクセスが拒否されたら拒否される {{jsxref("Promise")}} を返します。

ストレージへのアクセスが許可される条件

ストレージへのアクセスは、以下の一連のチェックに基づいて許可されます。

  1. 文書がすでにアクセスを許可されていれば、解決。
  2. 文書が null オリジンを持っていれば、拒否。
  3. 文書のフレームが主フレームであれば、解決。
  4. 副フレームのオリジンが主フレームのものと同じであれば、解決。
  5. 副フレームがサンドボックス化されていなければ、7へ飛ぶ。
  6. 副フレームにトークン allow-storage-access-by-user-activation がなければ、拒否。
  7. 副フレームの親フレームが最上位フレームでなければ、拒否。
  8. ブラウザーがユーザージェスチャーを処理中でなければ、拒否。
  9. ブラウザーが持っている追加の規則をチェック。例えば、ホワイトリスト、ブラックリスト、端末上の分類、ユーザー設定、クリックジャック防止の推測、ユーザーへの明示的なパーミッションの確認など。いくつかの規則が満たされていなければ、拒否。
  10. 文書にクッキーやその他のサイトストレージへのアクセスを許可し、将来の {{domxref("Document.hasStorageAccess()")}} および requestStorageAccess() の呼び出しのためにその事実を保存。

上記のすべての要件が満たされていると仮定すると、Firefox は、ユーザーセッション存続期間の最大24時間で、現在のセッションのファーストパーティのオリジンのしきい値数まで、要求オリジンへのストレージアクセスを自動的に許可します。 要求オリジンがストレージアクセス許可の最大許容数を超えた後、同じ閲覧セッション中に requestStorageAccess() を呼び出すと、ユーザーにプロンプトします。

オリジンが取得できる同時ストレージアクセス許可の最大数は、現在のセッションでアクセスされた最上位オリジンの数の 1% または 5 のいずれか大きい方として現在定義されている正の整数です。 しきい値は eTLD+1 のレベルで適用されるため、例えば、foo.example.combar.example.com に対する2つのストレージアクセス許可は、制限に対する単一の例外としてのみカウントされます。

requestStorageAccess() 呼び出しの時点で、要求オリジンがストレージアクセスを持っている場合...

...最大値より少ないオリジン:

...最大値以上のオリジン:

一時的または永続的なストレージアクセス許可が期限切れになると、要求オリジンのストレージアクセスを持つオリジンの数が1ずつ減ります。

: 要求オリジンが追跡オリジン(tracking origin)として分類されていない場合、アクセス要求には、ページがリロードされると消滅する一時的なストレージアクセス許可が自動的に付与されます。 この場合、ユーザーにはプロンプトが表示されないため、requestStorageAccess() を呼び出しても、{{domxref("Document.hasStorageAccess()")}} によって返される値を変更する以外に副作用はありません。

デバッグ

ストレージアクセス許可のしきい値により、Firefox がユーザーにアクセスをプロンプトする条件の下でウェブサイトをテストすることがより難しくなる場合があります。 テストを簡単にするために、requestStorageAccess() 呼び出し時のプロンプトを制御する about:config に次の2つの設定を追加しました。

構文

var promise = document.requestStorageAccess();

引数

なし。

返値

ファーストパーティのストレージへのアクセスが許可されたら undefined で満たされ、アクセスが拒否されたら拒否される {{jsxref("Promise")}} です。

Promise が解決されると、 Promise が満たされたか拒否されたかに関わらず、ユーザージェスチャーが処理されているかのように解決ハンドラーが実行されます。

document.requestStorageAccess().then(
  () => { console.log('access granted') },
  () => { console.log('access denied') }
);

仕様書

この API はまだ提案段階にあります。 — 標準化プロセスはまだ始まっていません。現在のところ、この API の詳細の仕様書は、アップルのブログ投稿の Introducing Storage Access API、および WHATWG HTML issue 3338 — Proposal: Storage Access API で見ることができます。

ブラウザーの互換性

{{Compat("api.Document.requestStorageAccess")}}

関連情報

Storage Access API