Permissions-Policy: unload ディレクティブ
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
非標準: この機能は標準化されていません。非標準の機能はブラウザーの対応が限られ、将来的に変更または削除される可能性があるため、本番環境での使用は推奨されません。ただし、標準の選択肢が存在しない特定のケースでは、有効な代替手段となる場合があります。
HTTP の Permissions-Policy ヘッダーの unload ディレクティブは、現在の文書で unload イベントハンドラーの実行を許可するかどうかを制御します。
定義されたポリシーによってこの機能の使用が許可されていない場合、その文書に登録された unload イベントハンドラーは実行されません。
unload ハンドラーの動作は信頼できず、ページがバック/フォワードキャッシュ(英語) (bfcache) に保存されるのを妨げます。これらのハンドラーをブロックすると、ページ内のサードパーティ製スクリプトが unload ハンドラーを追加していても、そのページは bfcache の対象であり続けられます。代替手段については、unload イベントの使用上のメモを参照してください。
構文
Permissions-Policy: unload=<allowlist>;
<allowlist>-
この機能の使用を許可するオリジンのリストです。詳しくは
Permissions-Policyの構文を参照してください。
デフォルトのポリシー
Chrome では、unload のデフォルトの許可リストは () です。つまり、文書がオプトインしない限り、unload ハンドラーは実行されません。Chrome は当初 * をデフォルトの許可リストとして使用していましたが、段階的に変更しました(英語)。
例
>unload ハンドラーをブロックする
あるサイトが、ページを bfcache の対象に保つため、自身のページやその埋め込み iframe のいずれでも unload ハンドラーが実行されないようにしたいとします。その場合、次の HTTP レスポンスヘッダーを送信します。
Permissions-Policy: unload=()
unload ハンドラーを許可する
引き続き unload ハンドラーに依存しているサイトは、次の HTTP レスポンスヘッダーを送信することで、最上位のページでその実行を許可できます。
Permissions-Policy: unload=self
オリジンが https://example.com のオリジンをまたぐ iframe でも unload ハンドラーを許可するには、埋め込み側のページがそのオリジンを許可リストに含める必要があります。
Permissions-Policy: unload=(self "https://example.com")
さらに、<iframe> 要素に allow 属性を指定する必要があります。
<iframe src="https://example.com/embed" allow="unload"></iframe>
iframe 内で読み込まれる文書も、自身の Permissions-Policy: unload=self レスポンスヘッダーを使用して unload ハンドラーを許可する必要があります。
仕様書
この機能は、どの仕様書にも定義されていません。>ブラウザーの互換性
関連情報
Permissions-Policyヘッダー- Permissions Policy
unloadイベント- unload イベントの非推奨化(英語) - developer.chrome.com