fix(sdk): 设备检测顺序修订(iPad/Firefox 平板先判)+ FxiOS 前移

- device_type:iPad/Tablet 先于 Mobile/Android/iPhone 判(真实 iPad UA 恒含 Mobile 串、Firefox Android 平板显式 '; Tablet;',旧顺序误判手机)
- browser:Firefox/FxiOS 前移至 Safari 之前(iOS Firefox UA 尾部恒含 Safari/,旧顺序为死代码)
- 测试 23 过(翻转 iPad 锁定测试 + 新增 Android 平板、iOS Firefox 两条)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-15 15:58:42 +08:00
parent 8e4d5a3be5
commit 18537c5dba
2 changed files with 32 additions and 7 deletions
+7 -4
View File
@@ -53,8 +53,10 @@ export function parseUtm(search: string): Record<string, string> {
}
function detectDeviceType(ua: string): string {
if (/Mobile|Android|iPhone/.test(ua)) return "手机";
// iPad/Tablet 先判(规格修订):真实 iPad UA 恒含 Mobile 串、Firefox Android 平板
// 显式 "; Tablet;"——若先判 Mobile/Android 会把它们误归为"手机"
if (/iPad|Tablet/.test(ua)) return "平板";
if (/Mobile|Android|iPhone/.test(ua)) return "手机";
return "PC";
}
@@ -68,13 +70,14 @@ function detectOs(ua: string): string {
}
function detectBrowser(ua: string): string {
// MicroMessenger 必须最先测:微信 WebView 的 UA 内嵌 Chrome/Safari 引擎串,
// 与 "Edg 必须先于 Chrome" 同理(后测永远轮不到)。
// MicroMessenger 最先测:微信 WebView 的 UA 内嵌 Chrome/Safari 引擎串;
// FxiOS(iOS Firefox)先于 Safari 测:其 UA 尾部恒含 Safari/——与 "Edg 必须先于
// Chrome" 同一死代码模式,后测永远轮不到。
if (/MicroMessenger/.test(ua)) return "WeChat";
if (/Edg(e|A|iOS)?\//.test(ua)) return "Edge";
if (/Chrome\/|CriOS\//.test(ua)) return "Chrome";
if (/Safari\//.test(ua)) return "Safari";
if (/Firefox\/|FxiOS\//.test(ua)) return "Firefox";
if (/Safari\//.test(ua)) return "Safari";
return "";
}