From d820e4305e74ae229a418974b885c0ac37487310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Fri, 18 Sep 2026 20:03:43 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20spec=E6=8C=89CF7=206.1.6=E6=BA=90?= =?UTF-8?q?=E7=A0=81=E5=AE=9E=E6=B5=8B=E4=BF=AE=E6=AD=A3=E2=80=94=E2=80=94?= =?UTF-8?q?wpcf7statuschanged=E7=8A=B6=E6=80=81=E6=9C=BA/=E5=8E=9F?= =?UTF-8?q?=E7=94=9Fsubmit=E8=A7=A6=E5=8F=91form=5Fsubmit/=E6=97=B6?= =?UTF-8?q?=E5=BA=8F=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- .../specs/2026-09-18-collection-phase-b-design.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/specs/2026-09-18-collection-phase-b-design.md b/docs/superpowers/specs/2026-09-18-collection-phase-b-design.md index 841f5e1..66c3703 100644 --- a/docs/superpowers/specs/2026-09-18-collection-phase-b-design.md +++ b/docs/superpowers/specs/2026-09-18-collection-phase-b-design.md @@ -27,14 +27,14 @@ ### 1.2 form_*(Contact Form 7 全过程) -监听 CF7 DOM 事件(冒泡至 document)。**事件名/载荷以实测与源码为准**(见 §6 验证路径),设计按 CF7 5.x/6.x 已知形态:`wpcf7submit / wpcf7invalid / wpcf7spam / wpcf7mailsent / wpcf7mailfailed`。 +监听 CF7 DOM 事件(**已按线上 CF7 6.1.6 源码实测核验**,2026-09-18):CF7 6.x 无 wpcf7invalid/wpcf7mailsent 等旧事件——全过程状态走 **`wpcf7statuschanged`**(`detail.status` ∈ init/validating/invalid/unaccepted/spam/mail_sent/mail_failed/resetting);`wpcf7submit` 在 AJAX 响应后才触发(带 apiResponse,弃用);CF7 拦截原生 submit 于 form 元素冒泡阶段(`preventDefault` + `wpcf7.submit` 内构造 FormData),所有自定义事件 `bubbles:true`。FormData 构造含 hidden 字段(`:where(input,textarea,select):enabled` + default append)。 | 事件 | 触发 | 属性 | |---|---|---| | form_start | .wpcf7-form 内首次 isTrusted focusin/input(每表单实例一次) | form_id | -| form_submit | wpcf7submit(**每次尝试**) | form_id, submission_id | -| form_error | wpcf7invalid / wpcf7spam | form_id, submission_id, error_code(invalid/spam/other——other 为 forward-compat 桶,若 CF7 源码核验发现其他失败事件则启用), field_count | -| form_submit_result | wpcf7mailsent → result_code:"mail_sent";wpcf7mailfailed → "mail_failed" | form_id, submission_id, result_code | +| form_submit | **表单原生 submit(document capture,与 _ctk_sid 写入同点——先于 CF7 拦截)**,每次尝试 | form_id, submission_id | +| form_error | wpcf7statuschanged(status=invalid/unaccepted → error_code "invalid";spam → "spam") | form_id, submission_id, error_code, field_count | +| form_submit_result | wpcf7statuschanged(status=mail_sent → "mail_sent";mail_failed → "mail_failed") | form_id, submission_id, result_code | - **submission_id 语义**:一次提交尝试 = 一个 ID——**原生 submit 捕获时生成并写入隐藏字段**(§1.5 时序设计),form_submit / result 事件引用该 ID。form_start 不生成。 - **form_id 规整**:从 CF7 unit_tag/action 解析表单编号 → `cf7-{ID}`(如 cf7-156),不暴露完整内部串。 @@ -101,7 +101,7 @@ spec 附录写死(阶段C 直接照做,客迹侧零改动): ## 6. 验证与部署 -- **CF7 事实核验(实现第一步)**:读线上 CF7 版本(当前 6.1.6)公开源码(wp-content/plugins/contact-form-7/includes/js/index.js)确认事件 dispatch 名/payload/FormData 时序;Playwright 在 hesucar 空表单提交实测 invalid+submit 路径(无副作用)。开发期不真提交验证 mailsent——按源码实现,**部署后以本节末条的真实测试询盘闭环验证**。 +- **CF7 事实核验(已完成,2026-09-18)**:线上 CF7 6.1.6 源码实测——事件集/时序/FormData 行为已写入 §1.2(wpcf7statuschanged 状态机 + 原生 submit capture 确定性时序 + hidden 字段采集确认)。开发期不真提交验证 mailsent——按源码实现,**部署后以本节末条的真实测试询盘闭环验证**。 - SDK 单测:点击委托命中/漏判、CF7 事件模拟、submission_id 每次尝试独立、form_start 去重、pattern 匹配、onSegmentChange、track 补归属。 - server 测试:6 新事件校验(枚举/格式)、漏斗 API distinct session 口径、归因 paid_social/utm_medium 分支、规则 v2 重算幂等。 - admin:时间线渲染新事件、漏斗卡数据正确。