如测试所示,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 内的所有元素都允许具有全屏模式。
这是因为权限转换为<iframe>
一个,其中表示 iframe属性中 URL 的来源。
您可以在上面的测试中观察到这一点,也可以自己检查:fullscreen *
fullscreen 'src'
'src'
src=
// array of allowed origins for 'fullscreen' feature:
var origins = featurePolicy.getAllowlistForFeature('fullscreen');
里面<iframe src='https://example.com' allow="fullscreen *">
会origins
而https://example.com
不是*
。
通配符*
仅在功能策略 HTTP 标头中有意义 - 如果它允许页面上的任何内容中fullscreen *
的全屏模式。<iframe src='...'>