joywayerandClaude Opus 4.7 fae7b3da82 CLAUDE.md:新增第 2 个典型案例「H5 与原生通讯接口的真实路径」
补在 LaunchScreen 案例后,记录本轮发现:

- 症状:基于 Contract §附录 A 实现 window.settings.getXxx() polyfill 后
  H5 行为不对,user 反馈"读不到数据"
- 错误做法:把附录 A 9 项 getter 实现为 polyfill,认为是 H5 主路径
- 原项目真相:grep "var app_" 在 daoqi/msext NewRootVC.m:1204 /
  gameController.m:2160 / AppDelegate.m:259,发现 H5 主路径是写 .js 文件
  + <script src> 同步引入预生成的全局变量(不是 polyfill 函数)
- 同时发现 Contract §4.2 本身也写错(漏 6 项 / 多 2 项 / 文件名变量名混淆)
- 修复:撤销 §3.4.1 polyfill / 新增 §7.5 app_*.js 预注入 / 全面修订
  Contract §4.2

教训 3 条:
  1. 文档与代码冲突时原项目代码是真理。Contract 也可能写错(10 年前
     写就的文档遗漏/误传是常态),必须用 grep 验证字面字符串
  2. 优先验证字面字符串、不要依赖语义猜测:app_getbattery vs app_battery
     一字之差,凭"应该就是 app_battery 吧"100% 犯错
  3. iOS 最低系统版本是契约边界的天然过滤器:契约明示可不实现的旧接口
     新项目应主动剔除,不要"出于完备性"反而做一份用不到的实现

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-22 07:59:17 +08:00
S
Description
No description provided
24 MiB
Languages
Swift 94.5%
Objective-C++ 2.9%
JavaScript 1.8%
C 0.6%
Objective-C 0.2%