用户反馈现象
用户反馈:
- 偶发打开后空白。
- 用户认为这可能是 Web 套壳应用通病,类似 VS Code 早期也遇到过。
问题判断
Tauri/WebView 应用偶发白屏通常可能来自:
- 前端初始化 JS 报错,导致 app 没渲染。
- 某个启动时 invoke 后端命令失败且未 catch。
- localStorage 或本地配置损坏,导致初始化中断。
- WebView2 运行时异常。
- 资源路径加载失败。
- 后端命令阻塞或 panic。
- 上一次窗口状态、主题、视图状态异常。
用户不应该只看到空白页面。即使初始化失败,也应出现可读错误页,提供重试、重置本地 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。
不得记录:
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 记录该稳定性修复。
用户反馈现象
用户反馈:
问题判断
Tauri/WebView 应用偶发白屏通常可能来自:
用户不应该只看到空白页面。即使初始化失败,也应出现可读错误页,提供重试、重置本地 UI 配置、打开日志目录和复制诊断信息。
修复目标
增加前端启动兜底和错误恢复机制。
具体要求
1. 全局错误捕获
前端增加:
捕获后显示错误页,不要让页面空白。
2. 初始化流程 try/catch
所有启动阶段 invoke 必须 try/catch,包括:
失败时:
3. 错误页内容
错误页应包含:
按钮:
4. 安全模式
安全模式只加载基础 UI:
5. 日志与诊断
启动异常时记录:
不得记录:
6. localStorage / 配置恢复
如果本地 UI 配置损坏:
其他相关功能也要检查
该问题可能不只发生在启动,也可能发生在:
所有 render 函数应对空值、undefined、异常字段做防御。
测试要求
新增测试或手动验证:
验收标准
npm run build通过。