Feature Policy

この記事は翻訳作業中です。

これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

機能ポリシーで、ウェブ開発者はブラウザーの特定の機能や API を有効化、無効化したり、動作を変更したりすることができます。これはコンテンツセキュリティポリシーに似ていますが、セキュリティの動作ではなく機能の制御を行うものです。

概要

機能ポリシーは、ウェブサイト全体でどの機能が使用されるか (または使用されないか) を明示的に宣言する仕組みを提供します。これにより、使用可能な機能を制限することによって、コードベースが時とともに進化し — サードパーティーのコンテンツをより安全に構成する場合と同様に — ベストプラクティスを維持することができます。

機能ポリシーでは、ブラウザーがウェブサイト全体で使用されている特定の機能を実施するための一連の「ポリシー」を選択します。これらのポリシーは、サイトがアクセスできる API を制限したり、特定の機能についてブラウザーの既定の動作を変更したりすることができます。

機能ポリシーで行うことができるものの例です。

  • モバイル環境でサードパーティの動画の自動再生の既定の動作を変更する。
  • カメラやマイクなどの注意が必要な API をサイトが使用することを制限する。
  • iframe から全画面 API が利用できるようにする。
  • 同期 XHRdocument.write() のような古い API の使用をブロックする。
  • 画像が正しい大きさであり、ビューポートに対して大きすぎないことを確認する。

概念と使い方

Feature Policy allows you to control which origins can use which features, both in the top-level page and in embedded frames. Essentially, you write a policy, which is an allowed list of origins for each feature. For every feature controlled by Feature Policy, the feature is only enabled in the current document or frame if its origin matches the allowed list of origins.

For each policy-controlled feature, the browser maintains a list of origins for which the feature is enabled, known as an allowlist. If you do not specify a policy for a feature, then a default allowlist will be used. The default allowlist is specific to each feature.

ポリシーを書く

A policy is described using a set of individual policy directives. A policy directive is a combination of a defined feature name, and an allowlist of origins that can use the feature.

ポリシーの指定

Feature Policy provides two ways to specify policies to control features:

The primary difference between the HTTP header and the allow attribute is that the allow attribute only controls features within an iframe. The header controls features in the response and any embedded content within the page.

For more details see Using Feature Policy.

ポリシーで制御する型

Though Feature Policy provides control of multiple features using a consistent syntax, the behavior of policy controlled features varies and depends on several factors.

The general principle is that there should be an intuitive or non-breaking way for web developers to detect or handle the case when the feature is disabled. Newly introduced features may have an explicit API to signal the state. Existing features that later integrate with Feature Policy will typically use existing mechanisms. Some approaches include:

  • Return "permission denied" for JavaScript APIs that require user permission grants.
  • Return false or error from an existing JavaScript API that provides access to feature.
  • Change the default values or options that control the feature behavior.

The current set of policy-controlled features fall into two broad categories:

  • Enforcing best practices for good user experiences.
  • Providing granular control over sensitive or powerful features.

使い勝手を高めるためのベストプラクティス

There are several policy-controlled features to help enforce best practices for providing good performance and user experiences.

In most cases, the policy-controlled features represent functionality that when used will negatively impact the user experience. To avoid breaking existing web content, the default for such policy-controlled features is to allow the functionality to be used by all origins. Best practices are then enforced by using policies that disable the policy-controlled features. For more details see "Enforcing best practices for good user experiences".

The features include:

  • Animations
  • Image compression
  • Image downscaling
  • Legacy image formats
  • Synchronous scripts
  • Synchronous XMLHTTPRequest
  • Unsized media

特定の機能に対する細かい制御

The web provides functionality and APIs that may have privacy or security risks if abused. In some cases, you may wish to strictly limit how such functionality is used on a website. There are policy-controlled features to allow functionality to be enabled/disabled for specific origins or frames within a website. Where available, the feature integrates with the Permissions API, or feature-specific mechanisms to check if the feature is available.

The features include:

  • Accelerometer
  • Ambient light sensor
  • Autoplay
  • Camera
  • Encrypted media
  • Fullscreen
  • Geolocation
  • Gyroscope
  • Lazyload
  • Microphone
  • Midi
  • PaymentRequest
  • Picture-in-picture
  • Speaker
  • USB
  • VR / XR

仕様書

仕様書 状態 備考
Feature Policy
Feature-Policy の定義
ドラフト 初回定義。 Feature-Policy ヘッダーの定義。ディレクティブは制御する機能の仕様書で定義。詳細はそれぞれのディレクティブのページを参照。

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応
実験的
Chrome 完全対応 60Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 47Safari 未対応 なしWebView Android 完全対応 60Chrome Android 完全対応 60Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 47Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
accelerometer
実験的
Chrome 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
ambient-light-sensor
実験的
Chrome 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
autoplay
実験的
Chrome 完全対応 64Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 51Safari 未対応 なしWebView Android 完全対応 64Chrome Android 完全対応 64Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 51Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
camera
実験的
Chrome 完全対応 59Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 48Safari 未対応 なしWebView Android 完全対応 59Chrome Android 完全対応 59Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 48Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
encrypted-media
実験的
Chrome 完全対応 59Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 48Safari 未対応 なしWebView Android 完全対応 59Chrome Android 完全対応 59Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 48Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
fullscreen
実験的
Chrome 完全対応 57Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 46Safari 未対応 なしWebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 46Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
geolocation
実験的
Chrome 完全対応 56Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 45Safari 未対応 なしWebView Android 完全対応 56Chrome Android 完全対応 56Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 45Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
gyroscope
実験的
Chrome 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
layout-animations
実験的
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしEdge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なし
legacy-image-formats
実験的
Chrome 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 55
無効
完全対応 55
無効
無効 From version 55: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 55
無効
完全対応 55
無効
無効 From version 55: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
magnetometer
実験的
Chrome 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 69
無効
完全対応 69
無効
無効 From version 69: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 56
無効
完全対応 56
無効
無効 From version 56: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
maximum-downscaling-image
実験的
Chrome 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 55
無効
完全対応 55
無効
無効 From version 55: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 68
無効
完全対応 68
無効
無効 From version 68: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 55
無効
完全対応 55
無効
無効 From version 55: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
microphone
実験的
Chrome 完全対応 59Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 48Safari 未対応 なしWebView Android 完全対応 59Chrome Android 完全対応 59Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 48Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
midi
実験的
Chrome 完全対応 56Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 45Safari 未対応 なしWebView Android 完全対応 56Chrome Android 完全対応 56Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 45Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
payment
実験的
Chrome 完全対応 56Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 45Safari 未対応 なしWebView Android 完全対応 56Chrome Android 完全対応 56Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 45Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
picture-in-picture
実験的
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしEdge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なし
speaker
実験的
Chrome 完全対応 59Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 48Safari 未対応 なしWebView Android 完全対応 59Chrome Android 完全対応 59Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 48Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
sync-xhr
実験的
Chrome 完全対応 65
無効
完全対応 65
無効
無効 From version 65: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 52
無効
完全対応 52
無効
無効 From version 52: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 65
無効
完全対応 65
無効
無効 From version 65: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 65
無効
完全対応 65
無効
無効 From version 65: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 52
無効
完全対応 52
無効
無効 From version 52: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
unsized-media
実験的
Chrome 完全対応 66
無効
完全対応 66
無効
無効 From version 66: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 53
無効
完全対応 53
無効
無効 From version 53: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari 未対応 なしWebView Android 完全対応 66
無効
完全対応 66
無効
無効 From version 66: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Chrome Android 完全対応 66
無効
完全対応 66
無効
無効 From version 66: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 53
無効
完全対応 53
無効
無効 From version 53: this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled).
Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
usb
実験的
Chrome 完全対応 60Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 47Safari 未対応 なしWebView Android 完全対応 60Chrome Android 完全対応 60Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 47Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
vibrate
実験的
Chrome 完全対応 56Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 43Safari 未対応 なしWebView Android 完全対応 56Chrome Android 完全対応 56Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 43Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
vr
実験的
Chrome 完全対応 62Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 49Safari 未対応 なしWebView Android 完全対応 62Chrome Android 完全対応 62Edge Mobile 未対応 なしFirefox Android 未対応 なしOpera Android 完全対応 49Safari iOS 未対応 なしSamsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mfuji09
最終更新者: mfuji09,