Справочник API
getOS
Возвращает одну строку, идентифицирующую текущую операционную систему.
import { getOS } from 'os-detect'
const os = getOS()
// 'ios' | 'macos' | 'android' | 'windows' | 'linux' | 'chromeos' | 'unknown'Приоритет определения (побеждает первое совпадение):
- iOS / iPadOS
- Android
- ChromeOS
- Linux
- macOS
- Windows
'unknown'
ChromeOS проверяется раньше Linux, потому что userAgent-строки ChromeOS содержат "Linux" — неправильный порядок проверки привёл бы к тому, что Chromebook определялся бы неверно.
Тип OS
type OS = 'ios' | 'macos' | 'android' | 'windows' | 'linux' | 'chromeos' | 'unknown'Булевы проверки
Все функции синхронны, не имеют побочных эффектов и кэшируют свой результат после первого вызова.
import {
detectIsIOS,
detectIsMacOS,
detectIsAndroid,
detectIsWindows,
detectIsLinux,
detectIsChromeOS,
} from 'os-detect'| Функция | Возвращает true, когда | Поведение в Node.js |
|---|---|---|
detectIsIOS() | iPhone, iPod или iPad (включая iPadOS 13+) | всегда false |
detectIsMacOS() | macOS-десктоп (корректно исключает iPadOS 13+) | process.platform === 'darwin' |
detectIsAndroid() | телефоны и планшеты Android | process.platform === 'android' |
detectIsWindows() | Windows-десктоп или ноутбук (32-битный и 64-битный) | process.platform === 'win32' |
detectIsLinux() | Linux-десктоп (исключает Android и ChromeOS) | process.platform === 'linux' |
detectIsChromeOS() | устройства ChromeOS | всегда false |
Особенность iPadOS 13+
Начиная с iPadOS 13, Safari сообщает Macintosh в строке userAgent. detectIsIOS() корректно обрабатывает это, проверяя navigator.maxTouchPoints > 1. detectIsMacOS() соответственно исключает устройства на iPadOS — вы никогда не получите true от обеих функций на одном устройстве.
Пример — условный рендеринг
import { detectIsIOS, detectIsAndroid, detectIsWindows } from 'os-detect'
if (detectIsIOS()) {
// показать бейдж App Store
} else if (detectIsAndroid()) {
// показать бейдж Google Play
} else if (detectIsWindows()) {
// показать бейдж Windows Store
}detectIsWindows11
Асинхронная. Возвращает true только тогда, когда detectIsWindows() равно true и проверка Windows 11 прошла успешно.
import { detectIsWindows11 } from 'os-detect'
const isWin11 = await detectIsWindows11() // Promise<boolean>Браузер — использует navigator.userAgentData.getHighEntropyValues(['platformVersion']) (Chrome 90+ / Edge 90+). Windows 11 сообщает platformVersion >= 13.0.0. Возвращает false, если API недоступен или вызов не удался.
Node.js — использует os.release(). У Windows 11 номер сборки >= 22000. Возвращает false, если импорт не удался.
Немедленно возвращает false, если detectIsWindows() равно false — асинхронная работа не выполняется.
// Различаем Windows 10 и Windows 11
const isWindows = detectIsWindows()
const isWin11 = await detectIsWindows11()
if (isWin11) {
console.log('Windows 11')
} else if (isWindows) {
console.log('Windows 10 или старше')
}Категория устройства
Быстрые грубые проверки, группирующие значения ОС в категории «мобильное» и «десктопное».
import { isMobileDevice, isDesktopDevice } from 'os-detect'
isMobileDevice() // true, если iOS или Android
isDesktopDevice() // true, если macOS, Windows, Linux или ChromeOSЗаметка:
isMobileDevice()иisDesktopDevice()не являются взаимоисключающими. Устройство с нераспознанной ОС вернётfalseдля обеих. На текущем наборе распознаваемых значений ОС пересечений нет.