1

Navigator.mimeTypes: примеры (JAVASCRIPT)

Использование navigator.mimeTypes для определения MIME-типов
Раздел: BOM, Информация о браузере
navigator.mimeTypes: MimeTypeArray

Описание свойства navigator.mimeTypes

Свойство navigator.mimeTypes представляет собой объект MimeTypeArray, содержащий перечень MIME-типов, которые браузер может распознать или для которых доступны соответствующие плагины. Это свойство исторически использовалось для определения возможностей браузера и наличия установленных плагинов, например, для Flash или Java.

Свойство не принимает аргументов. При обращении к navigator.mimeTypes возвращается объект MimeTypeArray, который является коллекцией объектов MimeType. Каждый объект MimeType имеет свойства:

  • type: строка с наименованием MIME-типа.
  • description: описание типа, часто пустая строка в современных браузерах.
  • suffixes: строка с перечислением расширений файлов, связанных с этим типом, разделенных запятыми.
  • enabledPlugin: объект Plugin, который обрабатывает данный MIME-тип.

В современных браузерах поддержка плагинов практически прекращена, и это свойство часто возвращает фиксированный или пустой набор данных, сохраняясь в основном для обратной совместимости.

Простые примеры использования

Проверка существования свойства и количество известных браузеру MIME-типов.

if ('mimeTypes' in navigator) {
  console.log(`Обнаружено типов: ${navigator.mimeTypes.length}`);
} else {
  console.log('Свойство mimeTypes не поддерживается.');
}
Обнаружено типов: 0

Перебор всех MIME-типов в коллекции и вывод основной информации.

for (let mime of navigator.mimeTypes) {
  console.log(`Тип: ${mime.type}, Описание: ${mime.description}, Расширения: ${mime.suffixes}`);
}
// Вывод может быть пустым или содержать несколько типов, например:
// Тип: application/pdf, Описание: , Расширения: pdf

Проверка наличия поддержки конкретного MIME-типа, например, PDF.

let pdfType = navigator.mimeTypes['application/pdf'];
if (pdfType) {
  console.log('Поддержка PDF заявлена.');
} else {
  console.log('Поддержка PDF не заявлена.');
}
Поддержка PDF заявлена.

Альтернативные свойства в JavaScript

Для анализа возможностей браузера редко полагаются на navigator.mimeTypes. Вместо этого используют другие подходы.

navigator.plugins: коллекция установленных плагинов, тесно связанная с mimeTypes. Каждый плагин содержит свой массив поддерживаемых MIME-типов. Свойство также устарело.

Modern Feature Detection: современный метод, при котором проверяется существование определенных объектов или методов. Например, проверка поддержки PDF viewer: if ('application/pdf' in navigator.mimeTypes) {} — это устаревший способ. Более надежно проверять наличие API отображения PDF через условное создание элемента.

navigator.userAgent: строка с информацией о браузере и ОС. Анализ этой строки (user agent sniffing) менее надежен, но иногда используется для определения типа браузера, хотя не дает информации о поддержке конкретных MIME-типов.

Частые ошибки разработчиков

Основная ошибка — предположение, что свойство содержит актуальные данные о возможностях браузера. В современных браузерах коллекция часто пуста или содержит фиктивные данные.

Пример: попытка использовать информацию для определения, можно ли отобразить определенный контент.

// Ненадежный способ проверить поддержку Flash
let flash = navigator.mimeTypes['application/x-shockwave-flash'];
if (flash && flash.enabledPlugin) {
    console.log('Flash доступен.'); // Это может не работать
}
// Результат непредсказуем, чаще всего Flash не будет обнаружен.

Использование свойства без проверки его существования может привести к ошибкам в средах, отличных от браузера (например, Node.js).

// Код упадет в Node.js
console.log(navigator.mimeTypes.length);
ReferenceError: navigator is not defined

История изменений поддержки

Свойство navigator.mimeTypes было широко использовано в эпоху активного применения плагинов браузера. С отказом основных браузеров от поддержки плагинов (таких как NPAPI, включая Flash, Java applets) его практическая ценность свелась к нулю.

В современных браузерах (Chrome, Firefox, Edge, Safari) это свойство остается частью API для обратной совместимости, но возвращает либо пустую коллекцию, либо жестко заданный набор типов. Например, может указываться поддержка PDF независимо от реальных возможностей. Браузеры не раскрывают через этот API информацию о встроенных средствах просмотра (как PDF или изображений).

Спецификация W3C более не включает это свойство в активные рекомендации. Его использование считается устаревшим (legacy), и в будущих версиях браузеров оно может быть удалено полностью.

Расширенные и нестандартные примеры

Свойство можно использовать для создания простого логгера информации о среде выполнения, хотя данные будут ограничены.

Пример javascript
function logMimeTypesInfo() {
  let mimes = navigator.mimeTypes;
  let info = `Всего MIME-типов: ${mimes.length}`;
  for (let i = 0; i < mimes.length; i++) {
    let mt = mimes[i];
    info += `\n[${i}] ${mt.type} (${mt.suffixes}) - ${mt.description}`;
    if (mt.enabledPlugin) {
      info += ` -> Плагин: ${mt.enabledPlugin.name}`;
    }
  }
  console.log(info);
  return info;
}
logMimeTypesInfo();
Всего MIME-типов: 2
[0] application/pdf (pdf) -  -> Плагин: PDF Viewer
[1] text/plain (txt) -  -> Плагин: Text Viewer

Имитация проверки возможности отображения нескольких популярных форматов с созданием таблицы результатов.

Пример javascript
let formats = ['application/pdf', 'image/jpeg', 'video/mp4', 'application/x-shockwave-flash'];
let results = {};
formats.forEach(f => {
  results[f] = !!navigator.mimeTypes[f];
});
console.table(results);
(index)           Value
application/pdf               true
image/jpeg                   false
video/mp4                    false
application/x-shockwave-flash false

Поскольку свойство доступно только для чтения, попытка его изменить ни к чему не приведет.

Пример javascript
navigator.mimeTypes = 'test';
console.log(typeof navigator.mimeTypes); // object, значение не изменилось
object

Аналоги в других языках программирования

Концепция запроса MIME-типов, поддерживаемых средой исполнения, специфична для браузерного JavaScript. В серверных и системных языках обычно решают обратную задачу — определение MIME-типа по файлу.

PHP: функция mime_content_type() или класс finfo определяют MIME-тип содержимого файла.

echo mime_content_type('document.pdf');
// Или
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, 'image.png');
finfo_close($finfo);
application/pdf
image/png

Python: модуль mimetypes определяет тип по расширению файла, но не анализирует содержимое.

import mimetypes
type, encoding = mimetypes.guess_type('report.pdf')
print(type)
application/pdf

C: нет встроенной поддержки, используют сторонние библиотеки (например, libmagic).

Эти методы отличаются от JavaScript тем, что они активно определяют тип данных, а не пассивно сообщают о зарегистрированных в системе типах.

JS navigator.mimeTypes function comments

En
Navigator.mimeTypes Returns a MimeTypeArray object listing the MIME types recognized by the browser