On the self-hosted server page, load in a loop

用户使用 LobeChat 自托管服务器,通过 iOS 设备上的移动端 App (React Native) 访问时,页面持续加载,无法正常显示聊天界面。根据 Issue 报告,问题表现为加载循环(load in a loop),而非一次性的白屏或崩溃。

On the self-hosted server page, load in a loop

On the self-hosted server page, load in a loop

快速结论:此问题通常出现在 LobeChat 自托管服务中,使用 iOS 移动端 App (React Native) 访问时,页面陷入无限加载循环。优先排查 LobeChat 版本是否为 v2.1.53-canary.27 或更高,可能需要回退版本。

问题场景

用户使用 LobeChat 自托管服务器,通过 iOS 设备上的移动端 App (React Native) 访问时,页面持续加载,无法正常显示聊天界面。根据 Issue 报告,问题表现为加载循环(load in a loop),而非一次性的白屏或崩溃。

报错原文

On the self-hosted server page, load in a loop

此问题可能没有显式的 JavaScript 控制台报错,而是表现为页面无限重定向或重新渲染。如果涉及 iOS Safari 兼容性问题,可能看到应用卡在启动画面。

原因分析

根据 Issue 讨论,可能原因有多个,需要根据具体环境判断:

  • 可能原因一:移动端导航回归(v2.1.53-canary.27+)。存在一个竞态条件:toggleMobileTopic(false) 在 URL 导航完成之前清除了 activeTopicId,导致 ChatHydration 组件反复重定向回首页,在移动端表现为加载循环。最后一个确认正常工作的版本是 v2.1.53-canary.23
  • 可能原因二:React Native 应用生命周期冻结。当 React Native 移动端 App (v2.2+) 被切到后台再重新唤醒时,由于缺少 AppState 生命周期监听器,连接自托管服务器时无法正确重新绑定会话,导致应用完全冻结,看起来像是无限加载。
  • 可能原因三:iOS Safari 兼容性。如果用户设备运行的是 iOS 16 或更早版本,Safari 不支持 LobeChat 使用的某些 ES2018+ 正则特性,导致应用卡在启动画面。升级到 iOS 17+ 可解决此问题。

环境排查

  • 确认 LobeChat 自托管服务器的版本号。优先检查是否为 v2.1.53-canary.27 或更高版本。
  • 确认 iOS 设备的系统版本(例如是否低于 iOS 17)。
  • 确认问题发生的时机:是首次打开应用立即出现,还是切换到其他应用/标签页后再返回时出现。
  • 确认使用的客户端类型:React Native 移动端 App,还是 Web 浏览器。

解决步骤

  1. 检查 LobeChat 版本并回退(可优先尝试):如果服务器版本是 v2.1.53-canary.27 或更高,尝试回退到 v2.1.53-canary.23,观察问题是否消失。
  2. 升级 iOS 系统(可优先尝试):如果设备运行 iOS 16 或更早版本,建议升级到 iOS 17 或更高版本,以解决 Safari 兼容性问题。
  3. 检查 App 生命周期行为:如果问题发生在将应用切到后台再恢复后,可以关注 LobeChat 官方对 React Native 应用生命周期管理(AppState 监听)的修复。目前该问题已被标记,但暂无临时解决方案。
  4. 尝试使用 Web 浏览器替代:作为临时绕过方案,可以尝试在 iOS 的 Safari 浏览器中直接访问自托管服务器地址,而不是通过 React Native 移动端 App。

验证方法

完成上述步骤后,重新打开 LobeChat 移动端 App(或网页),确认页面能够正常加载并显示聊天对话列表和消息内容,不再出现无限旋转或重定向到首页的现象。

参考来源

lobehub/lobe-chat #15688

celebrityanime
celebrityanime
文章: 7429

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注