From 39584b90db2c5c7789ade468905ecb493d346dbe Mon Sep 17 00:00:00 2001 From: hanyuxinting Date: Thu, 27 Aug 2026 01:43:27 +0800 Subject: [PATCH 1/2] fix(swipe): guard document.addEventListener in Taro env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 Taro Android/iOS 运行时 document.addEventListener 可能不是函数, 在调用前增加环境检测,避免抛出 not a function 错误。 Co-Authored-By: Claude --- src/packages/swipe/swipe.taro.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/packages/swipe/swipe.taro.tsx b/src/packages/swipe/swipe.taro.tsx index 711dee5e1a..caae5134bc 100644 --- a/src/packages/swipe/swipe.taro.tsx +++ b/src/packages/swipe/swipe.taro.tsx @@ -231,6 +231,11 @@ export const Swipe = forwardRef< })) useEffect(() => { + if ( + typeof document === 'undefined' || + typeof document.addEventListener !== 'function' + ) + return // 并没有生效 const handler: any = (event: { target: Node | null }) => { const targets = [root] From 12a451d241dfea427b040017e935c8f2e6b7b1f4 Mon Sep 17 00:00:00 2001 From: hanyuxinting Date: Thu, 27 Aug 2026 01:58:33 +0800 Subject: [PATCH 2/2] fix(taro): guard document API calls in non-H5 environments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit imagepreview/barrage/popover 在 Taro Android/iOS 运行时直接访问 document API 会抛出 not a function,补充 typeof 守卫与 swipe 保持一致。 Co-Authored-By: Claude --- src/packages/barrage/barrage.taro.tsx | 5 +++++ src/packages/imagepreview/imagepreview.taro.tsx | 5 +++++ src/packages/popover/popover.taro.tsx | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/packages/barrage/barrage.taro.tsx b/src/packages/barrage/barrage.taro.tsx index f5e2e6c254..7851a5b3e1 100644 --- a/src/packages/barrage/barrage.taro.tsx +++ b/src/packages/barrage/barrage.taro.tsx @@ -144,6 +144,11 @@ const InternalBarrage: ForwardRefRenderFunction< if (!loop && index.current >= list.length) { return } + if ( + typeof document === 'undefined' || + typeof document.createElement !== 'function' + ) + return const _index = loop ? index.current % list.length : index.current const el = document.createElement(`View`) diff --git a/src/packages/imagepreview/imagepreview.taro.tsx b/src/packages/imagepreview/imagepreview.taro.tsx index 4cbba5e8ad..ae43708bcf 100644 --- a/src/packages/imagepreview/imagepreview.taro.tsx +++ b/src/packages/imagepreview/imagepreview.taro.tsx @@ -149,6 +149,11 @@ export const ImagePreview: FunctionComponent> = ( init() }, []) const init = () => { + if ( + typeof document === 'undefined' || + typeof document.addEventListener !== 'function' + ) + return document.addEventListener('touchmove', onTouchMove as any) document.addEventListener('touchend', onTouchEnd) document.addEventListener('touchcancel', onTouchEnd) diff --git a/src/packages/popover/popover.taro.tsx b/src/packages/popover/popover.taro.tsx index 51c0f83b18..68283bd413 100644 --- a/src/packages/popover/popover.taro.tsx +++ b/src/packages/popover/popover.taro.tsx @@ -86,7 +86,9 @@ export const Popover: FunctionComponent< nextTick(async () => { const rect = targetId ? await getRectInMultiPlatform( - document.querySelector(`#${targetId}`), + typeof document !== 'undefined' + ? document.querySelector(`#${targetId}`) + : null, targetId ) : await getRectInMultiPlatform(popoverRef.current, popoverId)