Repository navigation
1.2.4
这次找到真正的原因了 —— 而且不是一个,是两个叠在一起,任一都足以让恢复一次都不发生。
上一版加的调试日志直接把真相摊开了:一条「套用」记录都没有,说明不是「套了没用」,是压根没套。
一、配置里少了一个字段(它让恢复窗口永远不成立)
配置是浅合并的:Object.assign(默认值, 存档) 会用存档里的 view 整个替换默认的 view 对象 —— 于是「上次保存之后才新增的字段」就是 undefined。
restoreWindowMs 正是后来才加的,所以你本机配置里没有它。而 已过时间 <= undefined 恒为 false ——「恢复窗口」判定永远不成立,wantsRestore 恒为 false。不报错、不写日志,任何类型都不恢复。
现在 loadSettings 会逐字段重建,每个数值项都有兜底(0 仍然算「填了 0」,不会被当成没填)。
二、把「实况变了」当成了「用户在动」(这条更隐蔽)
宿主自己也会异步移动视图:Markdown 渲染完成后会自己把滚动位置摆一下、pdf.js 会自己去读那张表。这两件事都被当成了「用户已经接手」,于是视图在打开后约一秒就被永久交还 —— 日志里看得清清楚楚:
视图就绪后实况自己动了: xxx.md
用户在动,交还视图: xxx.md
改成只认真实输入事件(滚轮 / 触摸 / 按下 / 按键),而且必须发生在这个视图自己的容器里。click 与 scroll 故意不收:宿主的程序化滚动同样会触发它们。折叠侧保持原来的宽口径,不受影响。
顺带的改进
- 「已经到位」的记账不再等 2.5 秒静默期过了才认。
- 恢复失败时不再拿「还没恢复的默认值」覆盖记录(只在我们确实试过、确实不符、而用户又没碰过这个视图时保护)。
- 找不到视图时
applyRecord会写日志,不再安静返回(1.2.1 那次就是被这份安静藏住的)。 - 启动日志与设置页「当前状态」都会列出
就绪等待 / 恢复窗口 / 最多套用次数,并逐个视图显示「记录 vs 实况、套用几次、用户是否操作过」。
回归
视窗侧 172 → 178、合并 41 → 44,全绿。两条新回归都先验过红:
把「实况变了就交还」塞回去 → 精确复现 restored=0 applied=0;把 restoreWindowMs 去掉 → 套用列表为空。