Navigator.platform: примеры (JAVASCRIPT)
navigator.platform: StringОписание функции navigator.platform
Свойство navigator.platform является частью API браузера и позволяет определить операционную систему, на которой запущен веб-браузер. Это свойство доступно только для чтения и не принимает аргументов.
Функция используется для сбора информации о платформе пользователя, что может быть полезно для аналитики, отладки или условной загрузки ресурсов, специфичных для конкретной операционной системы. Однако её применение для определения возможностей браузера или функций считается устаревшим подходом.
Свойство возвращает строку, которая обычно содержит название платформы. Распространенные возвращаемые значения включают:
- 'Win32' для 32-разрядных версий Windows, даже на 64-разрядных системах.
- 'Win64' для 64-разрядных версий Windows (редко).
- 'MacIntel' для macOS на процессорах Intel.
- 'MacPPC' для устаревших Mac на процессорах PowerPC.
- 'Linux x86_64', 'Linux i686' для различных дистрибутивов Linux.
- 'iPhone', 'iPad' или 'iPod' для мобильных устройств Apple.
- 'Android' для устройств на базе этой ОС.
- Пустая строка, если платформа не определена.
Примеры использования
Простые случаи проверки платформы.
Определение операционной системы:
console.log('Платформа:', navigator.platform);Платформа: Win32
Проверка на принадлежность к Windows:
if (navigator.platform.indexOf('Win') > -1) {
console.log('Это система семейства Windows.');
}Это система семейства Windows.
Проверка на macOS:
if (navigator.platform.indexOf('Mac') > -1) {
console.log('Это система macOS.');
}Это система macOS.
Альтернативные методы в JavaScript
Для определения характеристик браузера и системы существуют другие свойства.
- navigator.userAgent: Содержит полную строку пользовательского агента. Более детальная, но сложная для парсинга и подвержена спуфингу. Рекомендуется использовать специфическое определение возможностей (feature detection).
- navigator.oscpu: Доступно только в Firefox, возвращает тип ОС (например, 'Windows NT 10.0'). Не является стандартным.
- Определение возможностей (Feature Detection): Предпочтительный метод. Вместо определения ОС проверяют поддержку конкретного API (например, 'serviceWorker' in navigator).
Типичные ошибки
Распространенные проблемы при работе со свойством platform.
Ошибка 1: Строгое сравнение без учета регистра и возможных вариантов.
// Неправильно
if (navigator.platform === 'win32') {
console.log('Windows');
}// На системе 'Win32' условие не выполнится из-за регистра.
Ошибка 2: Использование для детекции функций браузера.
// Ненадежно
if (navigator.platform.indexOf('Mac') > -1) {
// Предполагаем поддержку Touch Bar API
loadTouchBarSDK(); // Может не поддерживаться в Safari старых версий
}Ошибка 3: Игнорирование пустой строки или нестандартных значений.
const platform = navigator.platform;
console.log('Длина строки:', platform.length); // Может быть 0Изменения в спецификации
Свойство navigator.platform является устаревшим согласно спецификации WHATWG. Хотя оно до сих пор поддерживается всеми основными браузерами, его использование не рекомендуется для критической логики приложения из-за низкой точности и возможности настройки строки пользователем или браузером.
Современные браузеры могут возвращать обобщенные значения для защиты приватности пользователей или для упрощения в будущем. Например, некоторые браузеры начали возвращать фиксированную строку, такую как 'Linux' или 'Windows', без указания архитектуры.
Расширенные примеры применения
Комплексная проверка с созданием объекта данных о системе.
function getPlatformInfo() {
const p = navigator.platform;
return {
raw: p,
isWindows: /Win/i.test(p),
isMac: /Mac/i.test(p),
isLinux: /Linux|X11/i.test(p),
isIOS: /iPhone|iPad|iPod/i.test(p),
isAndroid: /Android/i.test(p),
isMobile: /iPhone|iPad|iPod|Android/i.test(p)
};
}
console.log(getPlatformInfo());{
raw: 'Win32',
isWindows: true,
isMac: false,
isLinux: false,
isIOS: false,
isAndroid: false,
isMobile: false
}Условная загрузка полифилла для специфичной ОС.
if (/Win32|Linux/.test(navigator.platform)) {
// Загрузка полифилла, необходимого только для Windows и Linux
import('./touch-screen-polyfill.js');
}Логирование для статистики без идентификации пользователя.
// Отправка обобщенной платформы на сервер аналитики
const analyticData = {
platformGroup: navigator.platform.indexOf('Win') > -1 ? 'windows' :
navigator.platform.indexOf('Mac') > -1 ? 'mac' :
navigator.platform.indexOf('Linux') > -1 ? 'linux' : 'other'
};
// fetch('/analytics', { method: 'POST', body: JSON.stringify(analyticData) });Определение необходимости отображения специфичного руководства.
const helpLink = document.getElementById('os-help');
if (navigator.platform.indexOf('Mac') > -1) {
helpLink.href = '/help/mac-keyboard-shortcuts';
} else {
helpLink.href = '/help/windows-keyboard-shortcuts';
}Аналоги в других языках программирования
Получение информации об операционной системе на серверной стороне или в нативных приложениях.
PHP: Функция php_uname().
echo php_uname('s'); // Тип операционной системыWindows NT
Python: Модуль platform.
import platform
print(platform.system())Windows
C#: Свойство Environment.OSVersion.
Console.WriteLine(System.Environment.OSVersion.Platform);Win32NT
Эти методы работают на стороне сервера или в нативной среде, возвращая данные о реальной системе, а не о браузере пользователя.