fix(splash-state): 修复页面就绪后无法关闭启动屏的问题

问题根源: _flushPendingHide() 中过早清除了 _pendingHide,导致页面就绪后 notifyPageReady() 检测不到 pending hide 请求,启动屏无法关闭。

修复方案: 当页面未就绪时,保留 _pendingHide 直到页面真正就绪后再清除。
This commit is contained in:
2026-07-13 10:43:47 +08:00
parent edea8c32de
commit 6b8b4acc96

View File

@@ -175,26 +175,26 @@ class SplashState {
* 如果页面还未就绪, 等待页面就绪后再 hide
*/
_flushPendingHide() {
const opts = this._pendingHide;
this._pendingHide = null;
if (this._mountGraceId) {
clearTimeout(this._mountGraceId);
this._mountGraceId = null;
}
// 如果页面还未就绪, 等待页面就绪
// 如果页面还未就绪, 等待页面就绪 (保留 _pendingHide, 等页面就绪后再处理)
if (!this._pageReady) {
// 兜底: 2s 内没就绪, 强制隐藏
if (this._pageReadyGraceId) clearTimeout(this._pageReadyGraceId);
this._pageReadyGraceId = setTimeout(() => {
if (this._visible) {
if (this._visible && this._pendingHide) {
console.warn('[splash-state] auto-hide after page-ready timeout');
this._doHide(opts || { reason: 'page-ready-timeout' });
this._doHide(this._pendingHide || { reason: 'page-ready-timeout' });
}
}, PAGE_READY_GRACE_MS);
return;
}
const opts = this._pendingHide;
this._pendingHide = null;
this._doHide(opts || { reason: 'mount-completed' });
}