Attribution Reporting API 不能在 HTML 中直接调用,它完全依赖 HTTP 响应头(如 Attribution-Reporting-Register-Source)和服务端协作,网页脚本无法通过 document 或 window 访问,且需 HTTPS、Permissions-Policy 声明及 Chrome ≥ 115 等严格条件。

Attribution Reporting API 在 HTML 中根本不能直接调用
浏览器禁止网页脚本通过 document 或 window 直接访问 Attribution Reporting API。这不是权限没开、代码写错,而是设计如此——该 API 完全基于 HTTP 请求头与服务端协作,HTML 页面本身只负责触发导航或 iframe 加载,不参与归因逻辑的注册或读取。
常见错误现象:ReferenceError: AttributionReporting is not defined 或 navigator.attributionReporting is undefined(Chrome 115+ 才默认启用,且需满足严格条件)。
- 必须在支持的浏览器中运行(Chrome ≥ 115,Edge ≥ 115,且未禁用
--enable-attribution-reporting) - 页面需为 HTTPS,且顶级上下文不能是
data:、blob:等非网络协议 -
attribution-reporting权限需通过 Permissions Policy 声明:<meta http-equiv="Permissions-Policy" content="attribution-reporting=(self)">
如何用 <a> 或 <form> 触发源事件(source)注册
归因源(source)注册靠的是导航请求携带特定 header,不是 JS 调用。你得让点击行为产生一次跨源(或同源)导航,并由目标页面响应 Attribution-Reporting-Register-Source header。
例如:用户点击广告链接跳转到落地页,这个跳转请求本身不带归因信息;但落地页服务器返回时,可在响应头中设置:
立即学习“前端免费学习笔记(深入)”;
Attribution-Reporting-Register-Source: {"source_event_id": "12345", "destination": "https://example.com", "expiry": 86400}
关键点:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- header 必须由**目标页面服务器**返回,HTML 页面无法用
fetch()或XMLHttpRequest模拟 - 用户点击的
<a href="https://landing.example.com/?utm_source=ad">链接本身无需加额外属性 - 若想延迟注册(比如等用户完成某个动作),可用
<form method="GET" action="https://landing.example.com">+ JS 提交,仍依赖服务端响应 header
如何让转化页(trigger)上报归因结果
转化事件(如购买成功页)需触发 trigger 注册,同样依赖响应头:Attribution-Reporting-Register-Trigger。它不关心页面内容,只看 HTTP 响应是否包含该 header 且格式合法。
示例响应头:
Attribution-Reporting-Register-Trigger: {"trigger_data": "789", "destination": "https://advertiser.com"}
注意:
- trigger 的
destination必须与 source 的destination完全一致(协议、域名、端口),否则匹配失败 - 浏览器不会立即发送报告,而是在后台排队、延迟(通常数分钟)、去重后以
POST /.well-known/attribution-reporting/report-event发送给 destination 域名的服务器 - HTML 页面无法监听“报告是否发出”,也拿不到 report ID 或原始数据——这是隐私沙箱的设计前提
调试时看不到 report?检查这三处 header 和状态
本地开发或测试阶段 report 不出现,大概率是以下任一环节断了:
- source 页面响应缺少
Attribution-Reporting-Register-Sourceheader,或 JSON 格式错误(用curl -I https://...验证) - trigger 页面响应缺少
Attribution-Reporting-Register-Triggerheader,或destination域名拼写/协议不匹配(比如 source 是https://a.com,trigger 写成http://a.com) - destination 域名(如
advertiser.com)未部署合规的 endpoint:/.well-known/attribution-reporting/report-event必须接受 POST、返回 200,且响应头含Attribution-Reporting-Eligible: true
Chrome DevTools 的 Application → Attribution Reporting 面板可查看已注册的 source/trigger,但 report 本身不出现在 Network 面板里——它走的是独立的、不可见的底层通道。


















