AMPHTML项目中的CMP检测机制解析
在AMPHTML项目中,开发者们提出了一个关于如何检测页面是否存在CMP(Consent Management Platform,同意管理平台)的技术需求。这个需求源于Prebid广告系统在AMP环境下的用户同步机制实现问题。
背景与需求
Prebid广告系统在AMP页面中提供了两种用户同步方式:load-cookie.html和load-cookie-with-consent.html。这两种方式的存在是因为当前系统无法准确判断页面是否包含CMP组件。这种不确定性导致开发者不得不维护两个版本的同步文件,增加了发布者的使用复杂度。
在传统网页环境中,开发者可以通过检测__tcf()和__gpp()等IAB标准函数来判断CMP的存在。但在AMP环境中,缺乏类似的明确检测机制,导致代码无法区分以下三种情况:
- 页面根本没有CMP
- CMP响应缓慢
- 用户尚未提交同意设置
技术实现现状
经过技术讨论和测试,发现AMP运行时已经提供了隐式的解决方案。当页面不存在amp-consent组件时,发送send-consent-data消息会立即返回一个包含空值的响应对象:
{
"sentinel": "amp",
"type": "consent-data",
"consentMetadata": null,
"consentString": null,
"consentPolicyState": null,
"consentPolicySharedData": null
}
这个行为实际上已经为开发者提供了判断CMP是否存在的依据:如果收到这个空值响应,可以确定页面没有CMP;如果有CMP存在,则会返回实际的同意数据或等待用户交互。
开发注意事项
在实际开发中,需要注意以下几点:
-
消息传递安全:AMP运行时会对消息来源进行严格的origin检查,开发者必须确保iframe与父页面同源,否则消息会被丢弃。
-
响应时间:对于没有CMP的页面,响应是即时的;而有CMP的页面响应时间取决于用户交互和CMP的具体实现。
-
兼容性处理:代码应该同时处理空值响应和有值响应两种情况,确保在各种环境下都能正常工作。
最佳实践建议
基于这一机制,开发者可以:
-
统一使用单一版本的同步文件,通过检测响应内容来判断CMP状态。
-
设置合理的超时机制,避免在异常情况下长时间等待。
-
在文档中明确说明这一行为,帮助其他开发者正确使用这一特性。
这一发现解决了最初的问题需求,使得Prebid可以简化其AMP同步机制,减少发布者的配置负担,同时保持功能的完整性和可靠性。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C084
baihu-dataset异构数据集“白虎”正式开源——首批开放10w+条真实机器人动作数据,构建具身智能标准化训练基座。00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python056
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7GLM-4.7上线并开源。新版本面向Coding场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。 目前,GLM-4.7已通过BigModel.cn提供API,并在z.ai全栈开发模式中上线Skills模块,支持多模态任务的统一规划与协作。Jinja00
agent-studioopenJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力TSX0135
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00