dsh/mailgo:fix/unread-status-bfcache
main
未读邮件点进去(阅读页自动标记已读)再返回列表,仍显示未读,需要手动刷新。
原因:浏览器从 BFCache(往返缓存)恢复的是旧 DOM,不会重新请求服务器,服务端已更新的已读状态无法反映到列表。
listjs
pageshow(persisted=true)
visibilitychange
问题:打开未读邮件(阅读页已自动标记已读)后返回列表,浏览器从 BFCache 恢复旧 DOM,列表仍显示未读,需手动刷新。 修复: - 三个列表页的交互脚本提取为公共模板 listjs(base.html),行为一致 - pageshow(persisted=true) 时静默 fetch 最新列表并局部更新行状态 (未读类/圆点/已删除行/未读角标/总数),不整页刷新、保留滚动 - visibilitychange 兜底:标签页重新可见时也同步一次(离线失败静默忽略, 仅 BFCache 场景失败才整页刷新) - 验证:合成 pageshow 事件驱动同步,未读->已读局部更新 PASS; 桌面/移动/平板布局回归无异常
No dependencies set.
The note is not visible to the blocked user.
问题
未读邮件点进去(阅读页自动标记已读)再返回列表,仍显示未读,需要手动刷新。
原因:浏览器从 BFCache(往返缓存)恢复的是旧 DOM,不会重新请求服务器,服务端已更新的已读状态无法反映到列表。
修复
listjs(base.html),消除三份重复pageshow(persisted=true)(BFCache 恢复的标准事件):静默 fetch 当前列表页,局部更新行状态——未读类/蓝点、已删除行移除、侧栏未读角标、共 N 封计数;不整页刷新,保留滚动位置与搜索词visibilitychange兜底:标签页重新可见时也同步一次;同步失败时仅 BFCache 场景整页刷新(避免离线时切回标签页直接跳错误页)验证