首页 > 解决方案 > 插入后将功能策略设置为 iframe

问题描述

尝试在 Firefox 中请求全屏时出现此问题。

Request for fullscreen was denied because of FeaturePolicy directives

我正在尝试在加载页面之前使用函数将allowiframe 节点中的属性从allow='autoplay; fullscreen'to设置allow='autoplay; fullscreen *'为 javascriptsetAttribute并且它运行良好,但是当我在页面加载后设置它时它不起作用。我看到 DOM 改变了值,但它没有效果。我试图通过将源更改为相同来重新加载 iframe,但重新加载后它将变为空白。

标签: javascriptiframefeature-policy

解决方案


测试所示,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 *">originshttps://example.com不是*

通配符*仅在功能策略 HTTP 标头中有意义 - 如果它允许页面上的任何内容中fullscreen *的全屏模式。<iframe src='...'>


推荐阅读