内容优化 / 方法解读

fencedframe 元素如何通过 config 属性加载嵌入内容

fencedframe 元素必须通过 Protected Audience 或 Shared Storage 等接口生成的 FencedFrameConfig 对象来加载嵌入内容,否则无法显示。

通过 API 生成配置对象的方法

fencedframe 元素本身不能直接指定要加载的网页 URL,必须通过 JavaScript 调用特定的 API 来生成一个 FencedFrameConfig 对象。这个配置对象包含了加载嵌入内容的必要信息,例如广告拍卖的结果或从共享存储中选择的 URL。开发者需要在 fencedframe 的开始标签中设置 width 和 height 属性来定义显示尺寸,但具体的加载逻辑必须通过 config 属性来完成。

常用的 API 包括 Protected Audience API 和 Shared Storage API。以 Protected Audience API 为例,调用 navigator.runAdAuction() 方法时,必须传入 resolveToConfig: true 参数,这样 Promise 才会解析为一个 FencedFrameConfig 对象。如果未设置该参数,Promise 将解析为一个只能用于 iframe 的 URN,无法用于 fencedframe。获取到配置对象后,将其赋值给 fencedframe 元素的 config 属性,即可完成内容的加载。

配置对象赋值与元素初始化

在 HTML 中,fencedframe 元素通常是一个空的标签,其内容通过 config 属性动态注入。开发者需要先在页面中获取 fencedframe 元素的引用,然后通过 JavaScript 将生成的 FencedFrameConfig 对象赋值给该元素的 config 属性。这一过程确保了嵌入内容与页面结构分离,提高了安全性。例如,代码中通过 document.querySelector('fencedframe') 获取元素,随后设置 frame.config = frameConfig。

需要注意的是,fencedframe 元素不能通过常规脚本直接读取或设置其源 URL,这是为了保护用户隐私。所有嵌入内容的加载都必须经过上述 API 的授权和生成。如果未正确赋值 config 属性,或者 API 调用失败,fencedframe 将无法显示任何内容。因此,确保 API 调用成功并正确传递 resolveToConfig: true 是加载嵌入内容的关键步骤。

验证嵌入内容加载是否成功

验证 fencedframe 元素是否成功加载嵌入内容,可以通过检查浏览器控制台和页面渲染效果进行判断。首先,在代码中添加 console.log() 语句,打印 runAdAuction() 返回的 Promise 结果,确认是否解析为 FencedFrameConfig 对象。如果控制台显示配置对象已生成,且 fencedframe 元素在页面上按预期尺寸显示,则说明加载成功。

如果页面中 fencedframe 区域为空白或报错,可能是 API 调用未正确返回配置对象,或者 resolveToConfig 参数设置错误。此时应检查 JavaScript 代码中的 API 调用逻辑,确保所有必要参数(如 resolveToConfig: true)已正确传递。此外,由于 fencedframe 的内容加载依赖于特定的隐私沙盒 API,还需确认浏览器是否支持这些 API,以及页面上下文是否符合调用要求。

与 iframe 元素的加载方式差异

fencedframe 元素与 iframe 元素在加载嵌入内容的方式上有显著区别。iframe 元素通常通过 src 属性直接指定要加载的 URL,而 fencedframe 则必须通过 API 生成的 FencedFrameConfig 对象来间接加载内容。这种差异源于 fencedframe 的设计初衷,即通过限制通信和访问来增强隐私保护。iframe 可以通过常规脚本直接读取或修改其源 URL,而 fencedframe 则禁止此类操作。

此外,fencedframe 的内容加载还受到 Permissions Policy 的限制。只有特定的隐私沙盒功能(如 Protected Audience API、Shared Storage API)可以在 fencedframe 内启用,其他常规功能(如摄像头、地理位置)则被禁止。这种严格的控制机制确保了嵌入内容与页面上下文之间的隔离,防止数据泄露。因此,在开发时必须明确 fencedframe 的加载逻辑依赖于 API 生成的配置对象,而非直接的 URL 指令。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. <fencedframe> HTML fenced frame element - HTML | MDN ↗
← 更多内容优化文章返回顶部 ↑