fingerprintjs
56 строк · 1.4 Кб
1/**
2* Checks for browser-specific (not engine specific) global variables to tell browsers with the same engine apart.
3* Only somewhat popular browsers are considered.
4*/
5export default function getVendorFlavors(): string[] {
6const flavors: string[] = []
7
8for (const key of [
9// Blink and some browsers on iOS
10'chrome',
11
12// Safari on macOS
13'safari',
14
15// Chrome on iOS (checked in 85 on 13 and 87 on 14)
16'__crWeb',
17'__gCrWeb',
18
19// Yandex Browser on iOS, macOS and Android (checked in 21.2 on iOS 14, macOS and Android)
20'yandex',
21
22// Yandex Browser on iOS (checked in 21.2 on 14)
23'__yb',
24'__ybro',
25
26// Firefox on iOS (checked in 32 on 14)
27'__firefox__',
28
29// Edge on iOS (checked in 46 on 14)
30'__edgeTrackingPreventionStatistics',
31'webkit',
32
33// Opera Touch on iOS (checked in 2.6 on 14)
34'oprt',
35
36// Samsung Internet on Android (checked in 11.1)
37'samsungAr',
38
39// UC Browser on Android (checked in 12.10 and 13.0)
40'ucweb',
41'UCShellJava',
42
43// Puffin on Android (checked in 9.0)
44'puffinDevice',
45
46// UC on iOS and Opera on Android have no specific global variables
47// Edge for Android isn't checked
48]) {
49const value = (window as unknown as Record<string, unknown>)[key]
50if (value && typeof value === 'object') {
51flavors.push(key)
52}
53}
54
55return flavors.sort()
56}
57