Permissions Policy 已取代 Feature Policy,通过 iframe 的 allow 属性(如 camera 'self')和 Permissions-Policy HTTP 响应头(如 camera=())控制摄像头访问,需 HTTPS 且父级策略优先。

Feature Policy 已被 Permissions Policy 取代,HTML5 中的 Feature-Policy HTTP 响应头和 <iframe> 的 allow 属性已于 2021 年起逐步废弃(Chrome 94+ 完全移除支持)。当前标准是使用 Permissions Policy —— 它功能更清晰、语法更统一,且被所有现代浏览器支持。
用 Permissions Policy 控制 iframe 摄像头访问
要禁止第三方 iframe 使用摄像头(如调用 navigator.mediaDevices.getUserMedia({video: true})),核心是在嵌入该 iframe 的页面中,通过 allow 属性显式关闭 "camera" 权限:
- 不写
allow="camera":默认禁止(最安全) - 写
allow="camera 'none'":明确禁止所有来源(含自身) - 写
allow="camera 'self'":仅允许同源 iframe 使用(推荐) - 写
allow="camera https://trusted.example.com":仅允许指定域名(需 HTTPS)
示例:
<iframe src="https://thirdparty.example.com/widget.html"allow="geolocation 'none'; microphone 'none'; camera 'self'; encrypted-media"></iframe>
配合 Permissions Policy HTTP 响应头(可选但推荐)
对整个页面启用更严格的默认策略,可在服务器响应中添加:
立即学习“前端免费学习笔记(深入)”;
这会禁止当前页面及其所有嵌套 iframe(除非子 iframe 显式用 allow 覆盖)使用摄像头。注意:() 表示空源列表,即完全禁用;若想保留自身权限,可写 camera=(self)。
验证是否生效
打开浏览器开发者工具(F12)→ Console,运行:
document.featurePolicy?.features?.().includes('camera')返回 false 表示策略已生效(现代浏览器中 featurePolicy 已弃用,建议改用 permissions API 验证):
在受限制的 iframe 内执行时,通常返回 "denied" 或直接抛出 NotAllowedError。
注意事项
- 策略只影响
<iframe>内的脚本行为,不影响父页面自身的摄像头调用 - 必须使用 HTTPS(本地
localhost除外),HTTP 页面下策略无效 - 第三方 iframe 若自身也设置
allow,不能绕过父页面的限制 —— 父级策略具有最高优先级 - 旧版浏览器(如 Safari 15.4 之前)可能仅支持
Feature-Policy,需按需降级兼容(不推荐新项目使用)



















