用途:当 Web 应用嵌入第三方页面,或自身作为 iframe/组件发布时,处理宿主与访客之间契约失效(空白框、消息被拒、尺寸异常、嵌入后登录失败等)。将父页与访客视为独立部署,明确显式协议。
主要能力:分类双方归属与各环境的精确源、同源/跨源/srcdoc/sandbox 模式;检查实际下发的 frame-src、frame-ancestors(仅 HTTP 头,不使用 default-src 回退,meta CSP 不能代表生产契约);设计可重放的 READY/init 握手(先注册监听再设 src,超时给出诊断而非永久转圈);双向消息鉴权(精确 targetOrigin,校验 event.origin、event.source、类型/版本与载荷模式,sandbox srcdoc 需绑定源+每实例 nonce 或 MessagePort);最小化 sandbox 与 allow 能力;跨源尺寸采用有界协议(ResizeObserver、合并到动画帧、实例号、父侧上下限,避免尺寸反馈循环);处理分区存储与被阻断第三方 Cookie,提供顶层登录恢复路径;在卸载或实例变化时移除监听器、观察器、定时器与通道。
使用方式:先按清单分类,再结合快速检索(如搜索 <iframe|srcDoc|sandbox=、postMessage|event.origin|MessageChannel、ResizeObserver|frame-ancestors|Permissions-Policy、requestStorageAccess)跟踪父页与访客,必要时用 curl -sSI 检查访客响应头。仓库含 tests/iframe-contract.bats 回归夹具,双端口启动父子服务,Playwright CLI 与 Chromium 可用时验证握手、错误源/源拒绝、有界伸缩尺寸、监听器清理、可访问标题与 frame-ancestors 拒绝;缺少 Playwright CLI 时跳过但源/审计检查仍运行。
适用场景:跨源插件/组件嵌入、多父页支持、动态高度自适应、嵌入式鉴权、能力授权最小化。
限制:不覆盖原生 WebView 桥接(另有技能)、站点级 CSP/XSS 基线、支付页卡字段安全与页面级 CLS/LCP/INP 归因;frame-ancestors 仅限 HTTP 头。修复仅提出最小双侧协议/策略变更与对应浏览器测试。