Skip to content

[Bug] 套题模式在 file:// / 刷新主页面后会中断、重复或无法汇总记录 #97

Description

@azusaazi

问题描述

套题模式依赖新窗口与跨窗口通信。在直接双击 index.htmlfile://)运行,或套题过程中刷新主页面时,套题会话容易中断,导致已完成内容不能稳定汇总为一条套题记录。

README 将 file:// 作为支持的本地运行方式,并描述套题模式可保存完整套题记录、在异常关闭或中断时尽量保留已完成记录;但实际使用中该流程不稳定。

复现步骤

  1. 下载并解压 0.6.2-fix 发布包。
  2. 双击打开根目录 index.html
  3. 进入“套题模式”,选择任意模式并开始答题。
  4. 在首题或任意一题进行时:
    • 刷新主页面;或
    • 手动关闭/返回题目页;或
    • 出现弹窗、窗口切换异常。
  5. 返回主页面查看套题状态和“练习记录”。

实际结果

可能出现以下情况:

  • 套题会话被中断,不能继续。
  • 已完成篇章没有汇总成一条完整套题记录,而是变成单篇记录或无记录。
  • 刷新主页面后再次点击套题,可能重新创建流程,原会话状态丢失或不清晰。
  • 题目页仍在,但主页面无法稳定识别其回传结果。
  • 不同浏览器、file://http://localhost 下表现不一致。

预期结果

  • 创建套题后应立即持久化会话、题序、计时、草稿和已完成结果。
  • 刷新主页面后应提示“继续未完成套题”,而不是创建新会话。
  • 异常关闭时,至少应能恢复已完成部分,并明确提示当前题的状态。
  • README 若继续声明支持 file://,套题模式也应在该场景有可靠降级或恢复机制。

建议的修复方向

  1. 在打开首题前立即持久化套题会话,而非等待题目页完成通信握手。
  2. 主页面初始化时恢复未完成的 suite session,并重新建立题目页通信。
  3. 每题提交后立即保存结果;最终汇总仅负责生成总记录,不应是唯一持久化节点。
  4. 为消息增加 suiteSessionId、题目序号和提交唯一标识,避免旧窗口/重复消息影响当前会话。
  5. 长期建议减少对 window.openpostMessage 的强依赖,改为单窗口或 iframe 内的套题状态机。
  6. 如果 file:// 无法可靠支持,建议在套题入口明确提示使用本地静态服务器。

补充

使用本地静态服务器(例如 python3 -m http.server 8000)通常比直接双击 index.html 稳定,但不能完全解决刷新、关闭窗口和跨窗口状态同步问题。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions