正如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 内的所有元素都允许具有全屏模式。
这是因为<iframe> 的fullscreen * 权限转换为fullscreen 'src' 权限,其中'src' 表示iframe 的src= 属性中URL 的来源。
您可以在上面的测试中观察到这一点,也可以自己检查一下:
// 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='...'> 的 any 内的全屏模式。