【问题标题】:Set feature-policy to iframe after insertion插入后将功能策略设置为 iframe
【发布时间】:2021-08-02 03:51:27
【问题描述】:

我在 Firefox 中尝试请求全屏时遇到了这个问题。

Request for fullscreen was denied because of FeaturePolicy directives

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

【问题讨论】:

    标签: javascript iframe feature-policy


    【解决方案1】:

    正如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 内的全屏模式。

    【讨论】:

    猜你喜欢
    • 2018-07-17
    • 2019-05-25
    • 2020-11-12
    • 1970-01-01
    • 2022-12-24
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多