在新版本的 Chrome 等浏览器中,默认情况下禁止了跨域 iframe 开启全屏的权限。在 iframe 中,我们通常使用 element.requestFullscreen() 方法来进行全屏展示。根据 MDN 文档,为了让 iframe 展示全屏,我们需要配置 allowfullscreen 属性,注意这个属性已经被重新定义为 allow="fullscreen"

HTMLCopy<iframe src="xxx" allow="fullscreen"></iframe>

W3C 提供了一个新标准叫做 Permissions-Policy,可以通过在返回的响应中传递权限策略的 HTTP 标头来进行更加精细化的权限控制。如果没有配置,默认是允许所有权限。权限策略会与 iframe 的 allow 属性取交集,也就是说,如果你的 iframe 没有设置 allow 属性,即使允许了所有权限,也不会生效。

我们可以在控制台的元素中对 iframe 元素点击右键,显示 iframe 的详细信息,就可以看到这个 iframe 的权限策略。

比如,SecureCorp 公司想要在应用中禁用震动和定位 API,可以在返回的响应中传递以下定义权限策略的 HTTP 标头信息:

HTTPCopyPermissions-Policy: vibrate 'none'; geolocation 'none'

通过使用 'none' 关键词,不管原来如何设定,这些特性在所有浏览上下文中都会被禁用。

Permissions-Policy:

其中,<allowlist> 可以是以下几种:

  • *:允许在当前文档和所有包含的内容(比如 iframes)中使用该特性。
  • 'self':允许在当前文档中使用该特性,但在包含的内容(比如 iframes)仍使用原值。
  • 'src':(只在 iframe 中允许)只要在 src 中的 URL 和加载 iframe 用的 URL 相同,则在 iframe 中允许该特性。
  • 'none':从最上层到包含的内容都禁止该特性。
  • <origin(s)>:在特定的源中允许,源 URL 以空格分割。

* 和 'none' 只允许单独使用,而 'self' 和 'src' 可以与多个源地址一起使用。

所有特性的默认 allowlist 如下:

  • *:本特性默认在最上层和包含的内容中(如 iframes)允许。
  • 'self':本特性默认在最上层允许,在包含的内容中(如 iframes)使用源地址相同的设置。也就是说,该特性在 iframe 中不允许跨域访问。
  • 'none':本特性默认在最上层和包含的内容中(如 iframes)都禁止。

参考文章:

跨域iframe 配置fullscreen权限的更多相关文章

  1. 跨域请求配置 Amazon AWS S3 腾讯云 阿里云 COS OSS 文件桶解决方案以及推荐 Lebal:Research

    跨域请求配置 跨域请求指的就是不同的域名和端口之间的访问.由于 ajax 的同源策略影响.跨域请求默认是不被允许的. 使用@font-face外挂字体时,可能遇到跨域请求CROS问题:F12控制台报错 ...

  2. 跨域iframe的高度自适应

    If you cannot hear the sound of the genuine in you, you will all of your life spend your days on the ...

  3. 使用postMesssage()实现跨域iframe页面间的信息传递----转载

    由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 ...

  4. 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】

    Iframe的强大功能偶就不多说了,它不但被开发人员经常运用,而且黑客们也常常使用它,总之用过的人知道它的强大之处,但是Iframe有个致命的“BUG”就是iframe的高度无法自动适应,这一点让很多 ...

  5. javascript跨域通信(一):利用location.hash实现跨域iframe自适应

    页面域关系: a.html所属域A:www.A.comb.html所属域B:www.B.com 问题本质: js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读 ...

  6. 谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

    谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个 ...

  7. spring mvc \ spring boot 允许跨域请求 配置类

    用@Component 注释下,随便放个地方就可以了 package com.chinaws.wsarchivesserver.core.config; import org.springframew ...

  8. Web Api跨域访问配置及调用示例

    1.Web Api跨域访问配置. 在Web.config中的system.webServer内添加以下代码: <httpProtocol> <customHeaders> &l ...

  9. nginx反向代理跨域基本配置与常见误区

    最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一 ...

  10. geoserver源码学习与扩展——跨域访问配置

    在 geoserver源码学习与扩展——restAPI访问 博客中提到了geoserver的跨域参数设置,本文详细讲一下geoserver的跨域访问配置. geoserver的跨域访问依赖java-p ...

随机推荐

  1. OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能

    简介: OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目.它来 ...

  2. 37 手游基于 Flink CDC + Hudi 湖仓一体方案实践

    ​简介: 介绍了 37 手游为何选择 Flink 作为计算引擎,并如何基于 Flink CDC + Hudi 构建新的湖仓一体方案. 本文作者是 37 手游大数据开发徐润柏,介绍了 37 手游为何选择 ...

  3. 修复 GitLab 的 CI Runner 提示找不到 pwsh 执行文件

    本文告诉大家如何修复使用 GitLab 的 Runner 做 CI 时提示 "pwsh": executable file not found in %PATH% 错误 有两个方法 ...

  4. VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同

    本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的 ...

  5. 前端关于获取网络时间的方法api

    淘宝 http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp 苏宁http://quan.suning.com/getSys ...

  6. js实现一个拖拽效果(本例vue中),边界限定,获取鼠标坐标,div坐标

    有事没事搞个图: demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  7. [ABC345D] Tiling 位运算の极致运用

    [ABC345D] Tiling 原题解地址:Editorial by Kiri8128 神写法. 将 \(H \times W\) 的网格展开为 \(H \times (W + 1)\) 的序列, ...

  8. 【web安全】隐藏nginx头文件信息

    摘要 Nginx作为开源web中间件,被广泛应用.因此源编译或者yum安装,都会带有其原有的nginx版本.很容易被针对,因此,通过修改nginx的源码.隐藏nginx版本和头部信息,保障nginx的 ...

  9. kube-proxy 流量流转方式

    简介 kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一.它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡.它有两种模式:iptables ...

  10. n个人围成一圈,顺序排号从1到n。从第一个人开始报数(从一到三如此循环)。凡是报到三的出局,最后剩下的一个人原始编号为?

    #include<stdio.h> int main(){ int num,n,i=0,flag=0; //num记录剩余人数,n记录总人数,i为原始编号,flag为编号123时的编号 p ...