fenced frames 已被 chrome 116 彻底移除,w3c 正式弃用;当前唯一合规方案是 protected audience api(fledge),需广告页返回 document-fenced-frame-html 响应头、主站调用 joinadinterestgroup 注册兴趣组,并动态创建 iframe 加载广告端点。

Fenced Frames 已不可用,Chrome 116 起已彻底移除支持,W3C 也已正式弃用该提案;当前唯一可行的隐私优先广告嵌入方案是 Protected Audience API(FLEDGE)。
为什么 fencedframe 标签现在根本跑不起来
你写好 <fencedframe src="https://ad.example/widget"></fencedframe>,浏览器会直接忽略——不是语法错,是标签本身已被移除:
- Chrome 自 116 版(2023 年中发布)起完全删除
fencedframe实现,控制台不会报错,但元素不渲染、无 DOM 节点 - Firefox 和 Safari 从未实现该标签;Edge 跟随 Chromium 内核,同样不支持
-
fencedframe从未进入 HTML 标准草案终稿,始终只是 Chrome 的临时实验特性 - 即使旧版 Chrome(≤115)启用
chrome://flags/#enable-fenced-frames,也无法与现代 Privacy Sandbox 机制(如 interest groups)协同工作
Protected Audience API 是目前唯一能落地的替代路径
它不依赖新 HTML 标签,而是通过 JS API + 响应头组合,在隔离环境中完成广告请求、竞价与渲染。关键约束必须满足:
- 广告方域名(如
https://ad.example)需在响应中返回Permissions-Policy: interest-cohort=(),显式声明参与 - 主站页面必须调用
navigator.joinAdInterestGroup()注册兴趣组(用户授权后),且不能跨域读取结果 - 广告渲染页必须返回
Content-Type: document-Fenced-Frame-HTML响应头,否则浏览器拒绝加载为隐私沙盒环境 - 广告脚本内无法访问
document.cookie、localStorage或navigator.userAgent,仅能调用document.interestCohort()获取模糊 topic
直接用 iframe 加 sandbox 行不行?
可以显示内容,但**不满足隐私合规要求**,尤其对广告场景:
-
iframe的srcURL 明文暴露在父页面 DOM 中,广告商可通过参数(如?user_id=123或?topic=fitness)被主站侧推断用户画像 - 即使加
sandbox="allow-scripts",仍可能通过postMessage反向泄露数据,或利用document.referrer泄露来源上下文 - 无法触发浏览器级的隐私沙盒机制(如 interest group 匹配、本地竞价),广告个性化能力归零
- 主流广告平台(Google Ad Manager、Amazon TAM)已停止接收
fencedframe请求,只接受 Protected Audience API 流量
真正要上线,必须检查这三处 header 和 JS 调用
缺一不可,否则广告不展示或被浏览器拦截:
- 广告渲染页响应头必须含:
Content-Type: document-Fenced-Frame-HTML和Permissions-Policy: interest-cohort=() - 主站页面需在用户同意后执行:
navigator.joinAdInterestGroup({name: 'fitness', owner: 'https://ad.example'}) - 广告加载必须用
document.createElement('iframe')动态创建,并设置src为广告方提供的 FLEDGE 渲染端点(非普通 HTML 地址)
最容易被忽略的是:广告方服务端必须主动返回 document-Fenced-Frame-HTML 类型,而不是常规 text/html —— 这个 header 错了,整个链路就卡死在第一步。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











