问题描述
套题模式依赖新窗口与跨窗口通信。在直接双击 index.html(file://)运行,或套题过程中刷新主页面时,套题会话容易中断,导致已完成内容不能稳定汇总为一条套题记录。
README 将 file:// 作为支持的本地运行方式,并描述套题模式可保存完整套题记录、在异常关闭或中断时尽量保留已完成记录;但实际使用中该流程不稳定。
复现步骤
- 下载并解压
0.6.2-fix 发布包。
- 双击打开根目录
index.html。
- 进入“套题模式”,选择任意模式并开始答题。
- 在首题或任意一题进行时:
- 刷新主页面;或
- 手动关闭/返回题目页;或
- 出现弹窗、窗口切换异常。
- 返回主页面查看套题状态和“练习记录”。
实际结果
可能出现以下情况:
- 套题会话被中断,不能继续。
- 已完成篇章没有汇总成一条完整套题记录,而是变成单篇记录或无记录。
- 刷新主页面后再次点击套题,可能重新创建流程,原会话状态丢失或不清晰。
- 题目页仍在,但主页面无法稳定识别其回传结果。
- 不同浏览器、
file:// 与 http://localhost 下表现不一致。
预期结果
- 创建套题后应立即持久化会话、题序、计时、草稿和已完成结果。
- 刷新主页面后应提示“继续未完成套题”,而不是创建新会话。
- 异常关闭时,至少应能恢复已完成部分,并明确提示当前题的状态。
- README 若继续声明支持
file://,套题模式也应在该场景有可靠降级或恢复机制。
建议的修复方向
- 在打开首题前立即持久化套题会话,而非等待题目页完成通信握手。
- 主页面初始化时恢复未完成的 suite session,并重新建立题目页通信。
- 每题提交后立即保存结果;最终汇总仅负责生成总记录,不应是唯一持久化节点。
- 为消息增加
suiteSessionId、题目序号和提交唯一标识,避免旧窗口/重复消息影响当前会话。
- 长期建议减少对
window.open 和 postMessage 的强依赖,改为单窗口或 iframe 内的套题状态机。
- 如果
file:// 无法可靠支持,建议在套题入口明确提示使用本地静态服务器。
补充
使用本地静态服务器(例如 python3 -m http.server 8000)通常比直接双击 index.html 稳定,但不能完全解决刷新、关闭窗口和跨窗口状态同步问题。
问题描述
套题模式依赖新窗口与跨窗口通信。在直接双击
index.html(file://)运行,或套题过程中刷新主页面时,套题会话容易中断,导致已完成内容不能稳定汇总为一条套题记录。README 将
file://作为支持的本地运行方式,并描述套题模式可保存完整套题记录、在异常关闭或中断时尽量保留已完成记录;但实际使用中该流程不稳定。复现步骤
0.6.2-fix发布包。index.html。实际结果
可能出现以下情况:
file://与http://localhost下表现不一致。预期结果
file://,套题模式也应在该场景有可靠降级或恢复机制。建议的修复方向
suiteSessionId、题目序号和提交唯一标识,避免旧窗口/重复消息影响当前会话。window.open和postMessage的强依赖,改为单窗口或 iframe 内的套题状态机。file://无法可靠支持,建议在套题入口明确提示使用本地静态服务器。补充
使用本地静态服务器(例如
python3 -m http.server 8000)通常比直接双击index.html稳定,但不能完全解决刷新、关闭窗口和跨窗口状态同步问题。