From 140263dfa7046260bef4f16be65e65826e348bba Mon Sep 17 00:00:00 2001 From: Albert Yu Date: Fri, 17 Jan 2025 10:38:20 +0800 Subject: [PATCH] [Menu] Fix iPad detection when applying scroll lock (#1342) --- packages/react/src/utils/detectBrowser.ts | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/react/src/utils/detectBrowser.ts b/packages/react/src/utils/detectBrowser.ts index dc260bb116..60278bc2bf 100644 --- a/packages/react/src/utils/detectBrowser.ts +++ b/packages/react/src/utils/detectBrowser.ts @@ -7,18 +7,24 @@ interface NavigatorUAData { } // Avoid Chrome DevTools blue warning. -export function getPlatform(): string { +export function getNavigatorData(): { platform: string; maxTouchPoints: number } { if (typeof navigator === 'undefined') { - return ''; + return { platform: '', maxTouchPoints: -1 }; } const uaData = (navigator as any).userAgentData as NavigatorUAData | undefined; if (uaData?.platform) { - return uaData.platform; + return { + platform: uaData.platform, + maxTouchPoints: navigator.maxTouchPoints, + }; } - return navigator.platform; + return { + platform: navigator.platform, + maxTouchPoints: navigator.maxTouchPoints, + }; } export function isWebKit() { @@ -29,7 +35,15 @@ export function isWebKit() { } export function isIOS() { - return /iP(hone|ad|od)|iOS/.test(getPlatform()); + const nav = getNavigatorData(); + + // iPads can claim to be MacIntel + // https://github.com/getsentry/sentry-javascript/issues/12127 + if (nav.platform === 'MacIntel' && nav.maxTouchPoints > 1) { + return true; + } + + return /iP(hone|ad|od)|iOS/.test(nav.platform); } export function isFirefox() {