§7.5 路径回退到 writeToFile:撤销 evaluateJavaScript 路径
CLAUDE.md 原则 A 升级为第一准则(H5 端零修改不可妥协)后,重新评估 上一轮 commit246f215引入的 evaluateJavaScript 路径: - WKUserScript(.atDocumentStart) 注入会被 H5 自带 var app_xxx 声明 覆盖回退 - WKUserScript(.atDocumentEnd) 又太晚,H5 业务顶层 <script> 已经 读过默认值 - 没有"在 <script src> 之后、业务 <script> 之前"的精确时机 - 任何"让 H5 改一行 / 改一个文件"的妥协方案违反原则 A 第一准则 - 详细分析见 CLAUDE.md「典型案例 3」 撤销方案:回到原 msext writeToFile 路径,原生在 loadFileURL 之前写 4 个 app_*.js 文件到沙盒,H5 启动时 <script src> 同步引入即可读到 实际值,时序 100% 等价 msext。 Design §7.5 全面回退(-285 / +126 行): - §7.5 头部:标题 / 简介改回写文件路径;中间走过两次弯路的完整决策 链记录在头部(commitf68b0db→246f215→ 本次 commit) - §7.5.2 注入时机表 → 4 个文件写入时机表,附"为什么不要照搬 WKUserScript 注入"警告段 - §7.5.3 删除 AppDataInjector + .legacy 标注;AppDataWriter 升回主路径 (保留 logger debug 输出 / msext 字面对齐细节 / 转义 / 大小写) - §7.5.4 接入点:writeInitial + writeBattery + writeNetwork 三阶段, addObserver 持续监听 - §7.5.5 大厅 / 子游戏 / 弹层差异表回到 "app_data.js / app_gamesname.js / app_battery.js / app_network.js" 维度 - §7.5.6 与 msext 差异表回到"writeToFile 等价化"对比 - §7.5.7 与 §3.4.1 polyfill 关系:§7.5 文件预写为主路径; WKUserScript + evaluateJavaScript "探索后撤回" - §7.5.8 联调路径恢复 cat 文件路径,加 4 种现象诊断表 Contract §4.2 同步: - 头部说明改回 "原生 writeToFile 写文件" + 撤销中间 evaluateJavaScript 路径的复盘段 - 子节标题回到 "写到 {gamedir}/{gamestart}/app_*.js" - 子节"更新时机"段回到 loadFileURL 前 / addObserver / 前台切换 - 删除"H5 团队 zip 自带 + 默认占位"约定(不再适用,原生重新负责写入) - 修订记录新增一行"路径再次调整(最终)" Contract §10 验收清单同步: - "H5 zip 自带 4 个 .js" → "沙盒下 4 个 .js 存在(xcrun simctl + cat 验证)" - 删"原生 WKUserScript 覆盖生效"项 → 加"值是实际渠道值而非占位" - "阶段 B 动态覆盖" → "battery/network 变化重写文件" Plan §6.4 里程碑加两行:CLAUDE.md A 升级 + §7.5 最终回退。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
3039daf903
commit
13cc24b463
@@ -766,7 +766,9 @@ H5 调 `OpenurlTitleData` 打开弹层 WebView,弹层内 H5 用 `window.settin
|
||||
| 2026-06-22 | Design 蓝图按 Contract 全 51 项接口补完实现骨架(H5↔Native 5 条通讯路径):22 项 §3.1 异步 handler / 15 项 §3.2 反向 callback / 3 项 §3.4 弹层 polyfill / 15 项 §7.5 `app_*.js` 预注入全局变量 / 2 项 §3.7 WKUIDelegate alert/confirm | `92298b6` / `c6221d3` / `d48ecc0` / `a06a18c` / `5f5f6a9` / `33574a1` / `f68b0db` |
|
||||
| 2026-06-22 | Contract §4.2 按 daoqi 原项目代码(grep `var app_` 字面字符串)全面修订:删 `app_gameid` / `app_compareCode`(原项目不写)/ 修正 `app_battery` → `app_getbattery`、`app_network` → `app_getnetwork`(文件名不带 get、变量名带 get)/ 补 6 项遗漏(version / Launchtype / getwifisignalLevel / gamename / invitationcode / gamesname) | `47a89aa` |
|
||||
| 2026-06-22 | CLAUDE.md 新增第 2 个典型案例「H5 与原生通讯接口的真实路径」记录"凭语义猜测会一字之差犯错、必须 grep 字面字符串验证"的教训 | `fae7b3d` |
|
||||
| 2026-06-22 | **§7.5 重大路径调整**:从「原生 `writeToFile` 写 4 个 `app_*.js` 文件」改为「H5 团队 zip 自带 + 原生 `WKUserScript(.atDocumentEnd)` / `evaluateJavaScript` 覆盖 `window.app_xxx` 全局变量」。Design §7.5 全面重写(`AppDataWriter` → `AppDataInjector`),Contract §4.2 同步新契约,§10 验收清单调整 | 本次 commit |
|
||||
| 2026-06-22 | **§7.5 重大路径调整**:从「原生 `writeToFile` 写 4 个 `app_*.js` 文件」改为「H5 团队 zip 自带 + 原生 `WKUserScript(.atDocumentEnd)` / `evaluateJavaScript` 覆盖 `window.app_xxx` 全局变量」 | `246f215` |
|
||||
| 2026-06-22 | **CLAUDE.md 原则 A 升级为第一准则**:H5 端零修改不可妥协,禁止任何"H5 改一行 / 改一个文件 / 加 polyfill / 调时机"的妥协方案。加典型案例 3 复盘 `app_*` 注入时序问题 | `3039daf` |
|
||||
| 2026-06-22 | **§7.5 路径再次回退(最终)**:撤销 `246f215`,回到 msext 原写文件路径 `AppDataWriter`。原因:WKUserScript 时序(documentStart 被 H5 自带 var 覆盖、documentEnd 又太晚)无法 1:1 等价 msext,任何要求 H5 配合改动的方案违反原则 A 第一准则。Design §7.5 + Contract §4.2 + §10 全面同步回退 | 本次 commit |
|
||||
|
||||
> **§3.4.1 撤销说明**:早期 commit `82bad8a` 实现的 `window.settings.getXxx()` polyfill 已撤销 — Contract §附录 A 自身明示「iOS<9 路径,新外壳如最低系统 ≥ iOS 14 可不实现」,本项目最低 iOS 15.6 → polyfill 路径未启用,H5 用 §7.5 的 `app_*.js` 文件路径作为唯一主路径。详细缘由见 Design §3.4.1(撤销说明)和 CLAUDE.md「典型案例」段。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user