docs: spec按CF7 6.1.6源码实测修正——wpcf7statuschanged状态机/原生submit触发form_submit/时序确认
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -27,14 +27,14 @@
|
|||||||
|
|
||||||
### 1.2 form_*(Contact Form 7 全过程)
|
### 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_start | .wpcf7-form 内首次 isTrusted focusin/input(每表单实例一次) | form_id |
|
||||||
| form_submit | wpcf7submit(**每次尝试**) | form_id, submission_id |
|
| form_submit | **表单原生 submit(document capture,与 _ctk_sid 写入同点——先于 CF7 拦截)**,每次尝试 | form_id, submission_id |
|
||||||
| form_error | wpcf7invalid / wpcf7spam | form_id, submission_id, error_code(invalid/spam/other——other 为 forward-compat 桶,若 CF7 源码核验发现其他失败事件则启用), field_count |
|
| form_error | wpcf7statuschanged(status=invalid/unaccepted → error_code "invalid";spam → "spam") | form_id, submission_id, error_code, field_count |
|
||||||
| form_submit_result | wpcf7mailsent → result_code:"mail_sent";wpcf7mailfailed → "mail_failed" | form_id, submission_id, result_code |
|
| 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 不生成。
|
- **submission_id 语义**:一次提交尝试 = 一个 ID——**原生 submit 捕获时生成并写入隐藏字段**(§1.5 时序设计),form_submit / result 事件引用该 ID。form_start 不生成。
|
||||||
- **form_id 规整**:从 CF7 unit_tag/action 解析表单编号 → `cf7-{ID}`(如 cf7-156),不暴露完整内部串。
|
- **form_id 规整**:从 CF7 unit_tag/action 解析表单编号 → `cf7-{ID}`(如 cf7-156),不暴露完整内部串。
|
||||||
@@ -101,7 +101,7 @@ spec 附录写死(阶段C 直接照做,客迹侧零改动):
|
|||||||
|
|
||||||
## 6. 验证与部署
|
## 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 补归属。
|
- SDK 单测:点击委托命中/漏判、CF7 事件模拟、submission_id 每次尝试独立、form_start 去重、pattern 匹配、onSegmentChange、track 补归属。
|
||||||
- server 测试:6 新事件校验(枚举/格式)、漏斗 API distinct session 口径、归因 paid_social/utm_medium 分支、规则 v2 重算幂等。
|
- server 测试:6 新事件校验(枚举/格式)、漏斗 API distinct session 口径、归因 paid_social/utm_medium 分支、规则 v2 重算幂等。
|
||||||
- admin:时间线渲染新事件、漏斗卡数据正确。
|
- admin:时间线渲染新事件、漏斗卡数据正确。
|
||||||
|
|||||||
Reference in New Issue
Block a user