Feature-Policy
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
警告: このヘッダーは仕様書では Permissions-Policy に改名されており、この記事は最終的にその変更を反映して更新される予定です。
HTTP の Feature-Policy ヘッダーは、自身のフレームおよび文書内の <iframe> 要素で、ブラウザーの機能を使用することを許可または拒否する仕組みを提供します。
詳しくは、機能ポリシーの記事を参照してください。
構文
Feature-Policy: <directive> <allowlist>
<directive>-
allowlistに適用される機能ポリシーディレクティブです。許可されているディレクティブ名の一覧は、以下のディレクティブを参照してください。 <allowlist>-
許可リストは、以下の値のうち 1 つ以上を取るオリジンの空白区切りのリストです。
*: この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) でオリジンに関係なく許可されます。'self': この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) のうち、同じオリジンのものに許可されます。'src': (iframe のallow属性のみ) この iframe に読み込まれた文書が iframe の src 属性の URL と同じオリジンから来ている限り、この機能はこの iframe で許可されます。メモ:
'src'のオリジンは iframe のallow属性の中でのみ使用され、これが既定のallowlistの値です。'none': この機能は最上位および含まれる閲覧コンテキストで無効になります。- <origin(s)>: この機能は特定のオリジン (例えば、
https://example.com) で許可されます。オリジンは空白で区切ってください。
*の値 (すべてのオリジンで有効) または'none'(すべてのオリジンで無効) は単独でのみ使用できますが、'self'と'src'は一つ以上のオリジンと一緒に使用することができます。機能はそれぞれ、既定の許可リストを持つよう定義されています。
ディレクティブ
accelerometer-
現在の文書が、端末の加速度に関する情報を、
Accelerometer(en-US) インターフェイスを通じて収集することを許可するかどうかを制御します。 ambient-light-sensor-
現在の文書が、端末の周囲の環境における光量についての情報を、
AmbientLightSensor(en-US) インターフェイスを通じて収集することを許可するかどうかを制御します。 autoplay-
現在の文書で
HTMLMediaElementインターフェイスがメディアの自動再生をリクエストすることを無効にするかどうかを制御します。このポリシーが有効であり、ユーザーによる操作がなかった場合、HTMLMediaElement.play()が返すPromiseがDOMExceptionで拒否されます。<audio>および<video>要素のautoplay属性は無視されます。 battery-
Battery Status API の使用を許可するかどうかを制御します。このポリシーが無効になっている場合、
Navigator.getBattery()が返すPromiseはNotAllowedErrorのDOMExceptionで拒否されます。 camera-
現在の文書が動画入力機器を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
getUserMedia()が返すPromiseはNotAllowedErrorのDOMExceptionで拒否されます。 display-capture-
現在の文書が
getDisplayMedia()メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、getDisplayMedia()から返却されるプロミスがNotAllowedErrorで拒否されます。 document-domain-
現在の文書が
document.domainを設定することを許可するかどうかを制御します。このポリシーが無効な場合、document.domainを設定しようとすると失敗し、SecurityErrorのDOMExceptionが発生します。 encrypted-media-
現在の文書が Encrypted Media Extensions (en-US) API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMediaKeySystemAccess()(en-US) から返却されたPromiseがDOMExceptionで拒否されます。 execution-while-not-rendered-
表示されないフレーム内 (例えば iframe が
hiddenまたはdisplay: noneの場合) でタスクを実行するかどうかを制御します。 execution-while-out-of-viewport-
ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。
fullscreen-
現在の文書が
Element.requestFullscreen()を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却されたPromiseがTypeErrorで拒否されます。 gamepad(en-US)-
現在の文書が Gamepad API を使用することを許可するかどうかを制御します。 このポリシーが無効であれば、
Navigator.getGamepads()の呼び出しでSecurityErrorのDOMExceptionが発生するようになり、gamepadconnectedおよびgamepaddisconnectedイベントは発生しなくなります。 geolocation-
現在の文書が
Geolocationインターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、getCurrentPosition()およびwatchPosition()を呼び出すと、関数のコールバックが呼び出され、PositionErrorコードがPERMISSION_DENIEDになります。 gyroscope(en-US)-
現在の文書が
Gyroscope(en-US) インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 layout-animations(en-US)-
現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。
legacy-image-formats(en-US)-
現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。
magnetometer(en-US)-
現在の文書が
Magnetometer(en-US) インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 microphone-
現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
MediaDevices.getUserMedia()で返却されたプロミス (Promise) がNotAllowedErrorのDOMExceptionで拒否されます。 midi-
現在の文書が Web MIDI API (en-US) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMIDIAccess()(en-US) から返却されたPromiseがDOMExceptionで拒否されます。 -
ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。
oversized-images(en-US)-
現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。
payment-
現在の文書が Payment Request API を使用することを許可するかどうかを制御します。このポリシーが有効であれば、
PaymentRequest()コンストラクターでSecurityErrorのDOMExceptionが発生します。 picture-in-picture(en-US)-
現在の文書が、該当する API を使用して Picture-in-Picture モードで動画を再生することを許可するかどうかを制御します。
publickey-credentials-get(en-US)-
現在の文書が Web Authentication API を使用して、すでに保存されている公開鍵資格情報を再取得することを許可するかどうかを制御します (例:
navigator.credentials.get({publicKey: ..., ...})(en-US))。 speaker-selection(en-US)-
現在の文書が Audio Output Devices API (en-US) を使用して、スピーカーを列挙したり選択したりすることを許可するかどうかを制御します。
sync-xhr-
現在の文書が同期
XMLHttpRequestリクエストを行うことを許可するかどうかを制御します。 unoptimized-images(en-US) Experimental Non-standard-
現在の文書が最適化されていない画像をダウンロードしたり表示したりすることを許可するかどうかを制御します。
unsized-media(en-US) Experimental Non-standard-
現在の文書が初期レイアウトの完了後にメディア要素の大きさを変更することを許可するかどうかを制御し案す。
usb(en-US)-
現在の文書が WebUSB API を使用することを許可するかどうかを制御します。
screen-wake-lock-
現在の文書が Screen Wake Lock API を使用して、端末が画面をオフにしたり暗くしたりしてはいけないことを示すことを許可するかどうかを制御します。
-
現在の文書が Web Share API の
Navigator.share()を使用して、テキスト、リンク、画像、その他のコンテンツをモバイルアプリなどのユーザーが任意に選択した任意の場所に共有することを許可するかどうかを制御します。 xr-spatial-tracking-
現在の文書が WebXR Device API を使用して WebXR セッションと対話することを許可するかどうかを制御します。
例
SecureCorp Inc. が、アプリケーションでマイクと Geolocation API を無効にしたがっているとします。以下の機能ポリシーを設定する HTTP レスポンスヘッダーを配信することで実現できます。
Feature-Policy: microphone 'none'; geolocation 'none'
オリジンのリストに 'none' キーワードを指定すると、指定された機能がオリジンに関係なく、すべての閲覧コンテキスト (iframe を含む) で無効になります。
仕様書
| Specification |
|---|
| Permissions Policy # permissions-policy-http-header-field |
ブラウザーの互換性
BCD tables only load in the browser