Skip to content

[1.5.2 Patch] 前端启动白屏兜底、全局错误页、日志入口与 UI 配置恢复 #64

Description

@weidonglang

用户反馈现象

用户反馈:

  • 偶发打开后空白。
  • 用户认为这可能是 Web 套壳应用通病,类似 VS Code 早期也遇到过。

问题判断

Tauri/WebView 应用偶发白屏通常可能来自:

  1. 前端初始化 JS 报错,导致 app 没渲染。
  2. 某个启动时 invoke 后端命令失败且未 catch。
  3. localStorage 或本地配置损坏,导致初始化中断。
  4. WebView2 运行时异常。
  5. 资源路径加载失败。
  6. 后端命令阻塞或 panic。
  7. 上一次窗口状态、主题、视图状态异常。

用户不应该只看到空白页面。即使初始化失败,也应出现可读错误页,提供重试、重置本地 UI 配置、打开日志目录和复制诊断信息。

修复目标

增加前端启动兜底和错误恢复机制。

具体要求

1. 全局错误捕获

前端增加:

window.addEventListener("error", ...)
window.addEventListener("unhandledrejection", ...)

捕获后显示错误页,不要让页面空白。

2. 初始化流程 try/catch

所有启动阶段 invoke 必须 try/catch,包括:

  • 读取 app snapshot。
  • 读取配置。
  • 读取 feature risk。
  • 读取 disclaimer。
  • 读取当前环境。
  • 自动刷新当前工具版本。

失败时:

  • 使用默认占位状态继续渲染。
  • 在错误中心显示失败信息。
  • 不阻断整个 app。

3. 错误页内容

错误页应包含:

DevEnv Manager 启动时遇到前端错误,但没有执行任何危险操作。

按钮:

重新加载
重置本地 UI 配置
打开日志目录
复制诊断信息
继续进入安全模式

4. 安全模式

安全模式只加载基础 UI:

  • 总览。
  • 设置 / 日志。
  • 清除本地 UI 状态。
  • 不自动执行扫描、安装、清理、修复。

5. 日志与诊断

启动异常时记录:

  • 时间。
  • app 版本。
  • 当前 view。
  • 错误摘要。
  • stack trace,如可用。
  • 最近执行的前端 action。

不得记录:

  • token。
  • 密码。
  • 私钥。
  • 用户文件内容。

6. localStorage / 配置恢复

如果本地 UI 配置损坏:

  • 自动忽略坏配置。
  • 提供重置按钮。
  • 不删除 DevEnv Manager 运行时安装目录。
  • 不删除环境变量备份。

其他相关功能也要检查

该问题可能不只发生在启动,也可能发生在:

  • 切换页面时某个 render 函数抛错。
  • 端口扫描结果包含异常字段。
  • 环境变量报告字段为空。
  • Python/JDK 验证返回空值。
  • C 盘扫描返回超大列表。
  • Markdown/JSON 导出失败。

所有 render 函数应对空值、undefined、异常字段做防御。

测试要求

新增测试或手动验证:

  • 模拟 app snapshot invoke 失败,页面仍能显示错误卡片。
  • 模拟配置 JSON 损坏,页面能进入安全模式。
  • 模拟 render 数据字段缺失,不白屏。
  • 模拟 unhandledrejection,显示错误页。
  • 点击“重置本地 UI 配置”后能恢复。

验收标准

  • 启动异常不再只有空白页。
  • 前端错误可复制诊断信息。
  • 提供重试、重置 UI 配置和打开日志目录入口。
  • 安全模式不会执行危险操作。
  • npm run build 通过。
  • release notes 记录该稳定性修复。

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