diff --git a/packages/taro-router/src/router/page.ts b/packages/taro-router/src/router/page.ts index 28f527793909..22af24987af8 100644 --- a/packages/taro-router/src/router/page.ts +++ b/packages/taro-router/src/router/page.ts @@ -250,6 +250,8 @@ export default class PageHandler { pageEl.style.zIndex = '1' } + eventCenter.trigger('__taroPageWillShowAfterDestroyed') + this.unloadTimer = setTimeout(() => { this.unloadTimer = null this.lastUnloadPage?.onUnload?.() @@ -267,6 +269,14 @@ export default class PageHandler { if (delta >= 1) this.unload(stacks.last, delta) } + willShow (page?: PageInstance | null) { + if (!page) return + const pageEl = this.getPageContainer(page) + if (pageEl) { + setDisplay(pageEl) + } + } + show (page?: PageInstance | null, pageConfig: Route = {}, pageNo = 0) { if (!page) return diff --git a/packages/taro-router/src/router/spa.ts b/packages/taro-router/src/router/spa.ts index f5b010cfa7f4..92ae203cb726 100644 --- a/packages/taro-router/src/router/spa.ts +++ b/packages/taro-router/src/router/spa.ts @@ -154,6 +154,12 @@ export function createRouter ( const delta = stacks.getDelta(pathname) // NOTE: Safari 内核浏览器在非应用页面返回上一页时,会触发额外的 POP 事件,此处需避免当前页面被错误卸载 if (currentPage !== stacks.getItem(prevIndex)) { + eventCenter.once('__taroPageWillShowAfterDestroyed', () => { + if (prevIndex > -1) { + const pageInstance = stacks.getItem(prevIndex) + pageInstance && handler.willShow(pageInstance) + } + }) handler.unload(currentPage, delta, prevIndex > -1) if (prevIndex > -1) { eventCenter.once('__taroPageOnShowAfterDestroyed', () => {