<fencedframe>:Fenced Frame 元素

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

<fencedframe> HTML 元素代表一个嵌套的浏览上下文,将另一个 HTML 页面嵌入到当前页面中。<fencedframe> 在形式和功能上与<iframe> 元素非常相似,只是:

  • <fencedframe> 内容及其嵌入站点之间的通信受到限制。
  • <fencedframe> 可以访问跨站点数据,但仅限于在非常特定的一组受控情况下,以保护用户隐私。
  • <fencedframe> 无法通过常规脚本进行操作或访问其数据(例如读取或设置源 URL)。<fencedframe> 内容只能通过特定 API 嵌入。
  • <fencedframe> 无法访问嵌入上下文的 DOM,嵌入上下文也无法访问 <fencedframe> 的 DOM。

<fencedframe> 元素是一种内置了更多原生隐私功能的 <iframe>。它解决了 <iframe> 的缺点,例如对第三方 cookie 和其他隐私风险的依赖。有关更多详细信息,请参阅Fenced Frame API

属性

此元素包含全局属性

allow 实验性

<fencedframe> 指定一个权限策略,该策略根据请求的来源定义 <fencedframe> 可用的功能。有关哪些功能可以通过在 fenced frame 上设置的策略进行控制的更多详细信息,请参阅Fenced Frame 可用的权限策略

height 实验性

一个无单位的整数,表示 fenced frame 的高度(以 CSS 像素为单位)。默认值为 150

width 实验性

一个无单位的整数,表示 fenced frame 的宽度(以 CSS 像素为单位)。默认值为 300

Fenced Frame 可用的权限策略

从顶层上下文委托给 fenced frame 以允许和拒绝功能的权限可以用作通信通道,因此构成隐私威胁。因此,可以通过权限策略(例如,camerageolocation)控制可用性的标准 Web 功能在 fenced frame 内不可用

在 fenced frame 内唯一可以通过策略启用的功能是专门设计用于 fenced frame 的特定功能

目前这些功能在 fenced frame 内始终启用。将来,哪些功能被启用将通过 <fencedframe>allow 属性进行控制。以这种方式阻止隐私沙盒功能也将阻止 fenced frame 的加载——届时将完全没有通信通道。

跨 Fenced Frame 边界聚焦

文档活动焦点跨越 fenced frame 边界(即,从 fenced frame 外部的元素移动到内部元素,反之亦然)的能力是有限的。用户发起的操作(例如点击或 Tab 键)可以做到这一点,因为没有指纹识别风险。

然而,尝试通过 API 调用(例如HTMLElement.focus())遍历边界是被禁止的——恶意脚本可能会使用一系列此类调用来泄露推断的信息跨越边界。

定位和缩放

作为替换元素<fencedframe> 允许使用object-position 属性调整嵌入文档在其框中的位置。

注意:object-fit 属性对 <fencedframe> 元素没有影响。

嵌入内容的大小可以通过 <fencedframe>config 对象的内部 contentWidthcontentHeight 属性设置。在这种情况下,更改 <fencedframe>widthheight 将改变页面上嵌入容器的大小,但容器内的文档将视觉缩放以适应。嵌入文档报告的宽度和高度(即Window.innerWidthWindow.innerHeight)将保持不变。

无障碍

使用辅助技术(例如屏幕阅读器)导航的人员可以使用 <fencedframe> 上的title 属性来标记其内容。标题的值应简洁地描述嵌入内容

html
<fencedframe
  title="Advertisement for new Log. From Blammo!"
  width="640"
  height="320"></fencedframe>

如果没有此标题,他们必须导航到 <fencedframe> 中才能确定其嵌入内容是什么。这种上下文切换可能会令人困惑且耗时,特别是对于包含多个 <fencedframe> 的页面和/或如果嵌入内容包含视频或音频等交互式内容。

示例

要设置 <fencedframe> 中将显示的内容,使用的 API(例如 Protected AudienceShared Storage)会生成一个 FencedFrameConfig 对象,然后将其设置为 <fencedframe>config 属性的值。

以下示例从 Protected Audience API 的广告竞价中获取一个 FencedFrameConfig,然后用于在 <fencedframe> 中显示中标广告

html
<fencedframe width="640" height="320"></fencedframe>
js
const frameConfig = await navigator.runAdAuction({
  // … auction configuration
  resolveToConfig: true,
});

const frame = document.querySelector("fencedframe");
frame.config = frameConfig;

注意:必须将 resolveToConfig: true 传递给 runAdAuction() 调用才能获取 FencedFrameConfig 对象。如果未设置,结果的Promise 将解析为一个 URN,该 URN 只能在<iframe> 中使用。

技术摘要

内容类别 流内容短语内容、嵌入内容、交互式内容、可感知内容。
允许内容 无。
标签省略 无,起始标签和结束标签都必须存在。
允许父级 任何接受嵌入内容的元素。
隐式 ARIA 角色 没有对应的角色
允许的 ARIA 角色 applicationdocumentimgnonepresentation
DOM 接口 HTMLFencedFrameElement

规范

规范
围栏框架
# the-fencedframe-element

浏览器兼容性

另见