Permissions-Policy

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

Permissions-Policy 响应标头提供了一种可以在本页面或包含的 iframe 上启用或禁止浏览器特性的机制。

更多的信息,请查看Feature Policy

Header type Response header
Forbidden header name yes

语法

Permissions-Policy: <directive> <allowlist>
<allowlist>

一个来源列表,在括号中包含的以下一个或多个值,并用空格分隔:

  • *: 允许在当前文档和所有包含的内容(比如 iframes)中使用本特性。
  • 'self': 允许在当前文档中使用本特性,但在包含的内容(比如 iframes)仍使用原值。
  • 'src': (只在 iframe 中允许) 只要在src 中的 URL 和加载 iframe 用的 URL 相同,则本特性在 iframe 中允许,
  • 'none': 从最上层到包含的内容都禁止本特性。 <origin(s)>: 在特定的源中允许,源 URL 以空格分割。

*none 值只允许单独使用,而 selfsrc 值可以与多个源一起使用。

所有的特性都有一个如下的默认的 allowlist

  • *: 本特性默认在最上层和包含的内容中(iframes)允许。
  • 'self': 本特性默认在最上层允许,而包含的内容中(iframes)使用源地址相同设定。也就是说本特性在 iframe 中不允许跨域访问。
  • 'none': 本特性默认在最上层和包含的内容中(iframes)都禁止。

指令

autoplay 实验性

控制是否允许当前文档自动播放媒体。这种控制是通过接口 HTMLMediaElement 来实现。当这种规则被禁用,而且没有用户操作的时候,HTMLMediaElement.play() 返回的 Promise 会拒绝并抛出一个 DOMException 异常。<audio><video> 上的 autoplay 属性会被忽略。

camera

控制是否允许当前文档使用视频输入设备。当这种规则被禁用时,MediaDevices.getUserMedia() 返回的 Promise 会拒绝并抛出 NotAllowedError DOMException 异常。

document-domain 实验性

控制是否允许当前文档设置 document.domain。当这种规则被禁用时,尝试设置 document.domain 会失败并抛出 SecurityError DOMException 异常。

encrypted-media 实验性

控制是否允许当前文档使用 Encrypted Media Extension API(EME)。当这种规则被禁用时,Navigator.requestMediaKeySystemAccess() 返回的 Promise 会拒绝并抛出 DOMException 异常。

fullscreen

控制是否允许当前文档使用 Element.requestFullScreen()。当这种规则被禁用时,返回的 Promise 会拒绝并抛出 TypeError

geolocation

控制是否允许当前文档使用 Geolocation 接口。当这种规则被禁用时,调用 getCurrentPosition()watchPosition() 会返回包含 PERMISSION_DENIEDPositionError

microphone

控制是否允许当前文档使用音频输入设备。当这种规则被禁用时,MediaDevices.getUserMedia() 返回的 Promise 会拒绝并抛出错误 NotAllowedError

midi

控制是否允许当前文档使用 Web MIDI API。当这种规则被禁用时,Navigator.requestMIDIAccess() 返回的 Promise 会拒绝并抛出错误 DOMException

payment

控制是否允许当前文档使用 Payment Request API。当这种规则被启用时,构造函数 PaymentRequest() 会抛出错误 SecurityError

vr / xr

控制是否允许当前文档使用 WebVR API。当这种规则被禁用时,Navigator.getVRDisplays() 返回的 Promise 会拒绝并抛出错误 DOMException

示例

SecureCorp Inc. 公司想要在应用中禁用震动和定位 API,则可以在返回的 response 中传递以下定义权限策略的 HTTP 的标头信息:

Permissions-Policy: vibrate 'none'; geolocation 'none'

通过使用 'none' 关键词,不管原来如何设定,这些特性在所有浏览的上下文中都会被禁用。

规范

Specification
Permissions Policy
# permissions-policy-http-header-field

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Permissions-Policy
Experimental
accelerometer
Experimental
ambient-light-sensor
Experimental
attribution-reporting
Experimental
autoplay
Experimental
bluetooth
Experimental
browsing-topics
ExperimentalNon-standard
camera
Experimental
compute-pressure
Experimental
cross-origin-isolated
Experimental
display-capture
Experimental
document-domain
Experimental
encrypted-media
Experimental
fullscreen
Experimental
geolocation
Experimental
gyroscope
Experimental
hid
Experimental
identity-credentials-get
Experimental
idle-detection
Experimental
local-fonts
Experimental
magnetometer
Experimental
microphone
Experimental
midi
Experimental
otp-credentials
Experimental
payment
Experimental
picture-in-picture
Experimental
publickey-credentials-create
Experimental
publickey-credentials-get
Experimental
screen-wake-lock
Experimental
serial
Experimental
storage-access
Experimental
usb
Experimental
web-share
Experimental
Wildcards in Permissions-Policy allowlist origins
Experimental
window-management
Experimental
xr-spatial-tracking
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.
Uses a non-standard name.
Has more compatibility info.

参见