From 72451270cbcb183902907750e604668abc869c5f Mon Sep 17 00:00:00 2001 From: guoenxuan <111230671+guoenxuan@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:28:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(h5):=20=E4=BC=98=E5=8C=96=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BB=A5=E5=8F=8A=E4=BF=AE=E5=A4=8D=20onResi?= =?UTF-8?q?ze=20=E5=9B=9E=E8=B0=83=E5=8F=82=E6=95=B0=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AE=B5=20(#14967)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Zakary --- packages/taro-components/types/PageMeta.d.ts | 6 ++++++ packages/taro-router/src/api.ts | 20 +++++++++++++++++++- packages/taro-router/src/events/resize.ts | 18 ++++++++++++------ packages/taro/types/taro.lifecycle.d.ts | 3 +++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/packages/taro-components/types/PageMeta.d.ts b/packages/taro-components/types/PageMeta.d.ts index 017badd09e76..72b44b73473d 100644 --- a/packages/taro-components/types/PageMeta.d.ts +++ b/packages/taro-components/types/PageMeta.d.ts @@ -64,6 +64,8 @@ interface PageMetaProps extends StandardProps { } declare namespace PageMetaProps { interface onResizeEventDetail { + /** 设备方向 */ + deviceOrientation?: 'portrait' | 'landscape' /** 窗口尺寸 */ size: resizeType } @@ -73,6 +75,10 @@ declare namespace PageMetaProps { windowWidth: number /** 窗口高度 */ windowHeight: number + /** 屏幕宽度 */ + screenWidth?: number + /** 屏幕高度 */ + screenHeight?: number } interface onScrollEventDetail { scrollTop: number diff --git a/packages/taro-router/src/api.ts b/packages/taro-router/src/api.ts index 9e05e146def1..217cc1195582 100644 --- a/packages/taro-router/src/api.ts +++ b/packages/taro-router/src/api.ts @@ -55,6 +55,20 @@ async function navigate (option: Option | NavigateBackOption, method: MethodName if ('url' in option) { const pathPieces = processNavigateUrl(option) const state = { timestamp: Date.now() } + if (pathPieces.pathname) { + const originPath = routesAlias.getOrigin(pathPieces.pathname) + const pagePath = originPath.startsWith('/') ? originPath.substring(1) : originPath + if (!RouterConfig.pages.includes(pagePath)) { + const res = { errMsg: `${method}:fail page ${pagePath} is not found` } + fail?.(res) + complete?.(res) + if (fail || complete) { + return resolve(res) + } else { + return reject(res) + } + } + } if (method === 'navigateTo') { history.push(pathPieces, state) } else if (method === 'redirectTo' || method === 'switchTab') { @@ -75,7 +89,11 @@ async function navigate (option: Option | NavigateBackOption, method: MethodName const res = { errMsg: `${method}:fail ${error.message || error}` } fail?.(res) complete?.(res) - reject(res) + if (fail || complete) { + return resolve(res) + } else { + return reject(res) + } } }) } diff --git a/packages/taro-router/src/events/resize.ts b/packages/taro-router/src/events/resize.ts index e5c183cb310e..215547a9e526 100644 --- a/packages/taro-router/src/events/resize.ts +++ b/packages/taro-router/src/events/resize.ts @@ -6,12 +6,18 @@ export function bindPageResize (page: PageInstance) { pageResizeFn && window.removeEventListener('resize', pageResizeFn) pageResizeFn = function () { - page.onResize && page.onResize({ - size: { - windowHeight: window.innerHeight, - windowWidth: window.innerWidth - } - }) + if (page.onResize) { + const mediaQuery = window.matchMedia('(orientation: portrait)') + page.onResize({ + deviceOrientation: mediaQuery.matches ? 'portrait' : 'landscape', + size: { + windowHeight: window.innerHeight, + windowWidth: window.innerWidth, + screenHeight: window.screen.height, + screenWidth: window.screen.width, + } + }) + } } window.addEventListener('resize', pageResizeFn, false) diff --git a/packages/taro/types/taro.lifecycle.d.ts b/packages/taro/types/taro.lifecycle.d.ts index b5bd97f3ee14..6d9f94eea0cd 100644 --- a/packages/taro/types/taro.lifecycle.d.ts +++ b/packages/taro/types/taro.lifecycle.d.ts @@ -56,9 +56,12 @@ declare module './index' { } interface PageResizeObject { + deviceOrientation?: 'portrait' | 'landscape' size: { windowWidth: number windowHeight: number + screenWidth?: number + screenHeight?: number } }