插入后将功能策略设置为 iframe
Set feature-policy to iframe after insertion
我在 Firefox 中尝试请求全屏时遇到这个问题。
Request for fullscreen was denied because of FeaturePolicy directives
我试图在页面加载之前使用 setAttribute
函数将 iframe 节点中的 allow
属性从 allow='autoplay; fullscreen'
设置为 javascript 中的 allow='autoplay; fullscreen *'
,并且它运行良好,但是当我在页面加载后设置它时它不起作用。我看到 DOM 更改了值,但没有效果。我尝试通过将源更改为相同的源来重新加载 iframe,但重新加载后它将变为空白。
如 test 所示,通过脚本更改 allow=
属性不会更改在 iframe 中起作用的功能策略权限。
这是因为 allow=
属性的权限在 DOM 构建阶段应用。
因此您必须重新加载 iframe 内容才能应用更改后的功能策略权限。
重新加载 iframe 内容完成工作 - 应用新权限。尝试这样做:
iframe = document.getElementById('id_of_frame');
iframe.setAttribute('allow', "autoplay; fullscreen *;");
iframe.src = iframe.src;
请注意 allow="fullscreen"
确实允许与 allow="fullscreen *"
完全相同,这意味着 iframe 中的所有元素都允许具有 full-screen 模式。
这是因为对于 <iframe>
,fullscreen *
权限转换为 fullscreen 'src'
权限,其中 'src'
表示 iframe 的 URL 的来源=20=]属性。
您可以在上面的测试中观察到这一点,也可以自己检查一下:
// array of allowed origins for 'fullscreen' feature:
var origins = featurePolicy.getAllowlistForFeature('fullscreen');
在 <iframe src='https://example.com' allow="fullscreen *">
内部,origins
将是 https://example.com
而不是 *
。
通配符 *
仅在功能策略 HTTP header 中有意义 - 在 fullscreen *
的情况下,它允许 any[= 内的 full-screen 模式页面上 <iframe src='...'>
的 45=]。
我在 Firefox 中尝试请求全屏时遇到这个问题。
Request for fullscreen was denied because of FeaturePolicy directives
我试图在页面加载之前使用 setAttribute
函数将 iframe 节点中的 allow
属性从 allow='autoplay; fullscreen'
设置为 javascript 中的 allow='autoplay; fullscreen *'
,并且它运行良好,但是当我在页面加载后设置它时它不起作用。我看到 DOM 更改了值,但没有效果。我尝试通过将源更改为相同的源来重新加载 iframe,但重新加载后它将变为空白。
如 test 所示,通过脚本更改 allow=
属性不会更改在 iframe 中起作用的功能策略权限。
这是因为 allow=
属性的权限在 DOM 构建阶段应用。
因此您必须重新加载 iframe 内容才能应用更改后的功能策略权限。
重新加载 iframe 内容完成工作 - 应用新权限。尝试这样做:
iframe = document.getElementById('id_of_frame');
iframe.setAttribute('allow', "autoplay; fullscreen *;");
iframe.src = iframe.src;
请注意 allow="fullscreen"
确实允许与 allow="fullscreen *"
完全相同,这意味着 iframe 中的所有元素都允许具有 full-screen 模式。
这是因为对于 <iframe>
,fullscreen *
权限转换为 fullscreen 'src'
权限,其中 'src'
表示 iframe 的 URL 的来源=20=]属性。
您可以在上面的测试中观察到这一点,也可以自己检查一下:
// array of allowed origins for 'fullscreen' feature:
var origins = featurePolicy.getAllowlistForFeature('fullscreen');
在 <iframe src='https://example.com' allow="fullscreen *">
内部,origins
将是 https://example.com
而不是 *
。
通配符 *
仅在功能策略 HTTP header 中有意义 - 在 fullscreen *
的情况下,它允许 any[= 内的 full-screen 模式页面上 <iframe src='...'>
的 45=]。