Программный интерфейс подключаемых модулей Netscape () — устаревшая кроссплатформенная архитектура разработки плагинов для веб-браузеров.

Интерфейс был разработан для семейства браузеров Netscape Navigator, начиная с версии 2.0, и в дальнейшем реализован многими другими браузерами. Начиная с середины 2010‑х годов, по соображениям безопасности и производительности, все основные браузеры прекратили поддержку NPAPI: технология была удалена из Internet Explorer (начиная с версии 5.5 Service Pack 2), из Firefox (начиная с версии 52, окончательно в версии 53), из Google Chrome (начиная с версии 45), из Safari (начиная с версии 14). В настоящее время NPAPI поддерживается только в некоторых нишевых или устаревших браузерах (например, Pale Moon, Waterfox классической версии на базе XUL-платформы).

Распространённость интерфейса была связана с его относительной простотой. Плагин объявляет о поддержке определённых MIME-типов (например, «audio/mpeg») с помощью информации в файле. Когда браузер встречает такой тип данных, он загружает связанный плагин, выделяет область на странице и передаёт плагину поток данных. Плагин полностью отвечает за отображение и обработку данных (видео, аудио, приложения), работая непосредственно внутри страницы, в отличие от старых браузеров, которые запускали внешнее приложение для неизвестного типа данных.

API интерфейса требует от браузера реализации небольшого набора функций — около 15 для инициализации, создания, уничтожения и позиционирования плагина. Например, базовая функция инициализации плагина выглядит так:

NPError NPP_Initialize(void);

Браузер вызывает её при загрузке плагина. Аналогично, NPP_Shutdown() отвечает за выгрузку, а NPP_New() создаёт экземпляр плагина для конкретного объекта на странице. NPAPI поддерживал скриптовое взаимодействие (через LiveConnect, XPConnect, npruntime), печать, полноэкранный режим, безоконные плагины и потоковую передачу данных.

История Идея плагинов зародилась в Adobe Systems (тогда — Adobe). Джон Уорнок, исполнительный директор Adobe, и Алан Паджет, один из основных разработчиков Acrobat Reader, хотели сделать возможным использование формата PDF внутри веб-страниц. В 1995 году Паджет и его коллега Eshwar Priyadarshan продемонстрировали Уорноку и Джеймсу Кларку (сооснователю Netscape) работающую интеграцию PDF в браузер Netscape. Демонстрация показала, что по клику на ссылке PDF-файл открывается прямо в окне браузера, смешиваясь с HTML-содержимым. Кларк был удивлён, что интеграция выполнена без участия Netscape, путём обратного проектирования браузера.

После этой демонстрации Netscape приняла предложение Adobe создать открытую архитектуру плагинов. Разработчики Adobe Гордон Дау (Gordon Dow) и Набель Аль-Шамма (Nabeel Al-Shamma) уже реализовали похожую архитектуру в Acrobat Reader, и Паджет предложил использовать этот опыт. Так родилась спецификация NPAPI, которая была включена в Netscape Navigator 2.0 (выпущен в 1996 году). Первоначальное название «Allan’s Hack» (в честь разработчика прототипа) не закрепилось.

Поддержка скриптовых языков Возможность взаимодействия с JavaScript на веб-странице реализовывалась через различные технологии. В Netscape использовался LiveConnect (Java-мост). В браузерах на базе Mozilla (Firefox, SeaMonkey) применялся XPConnect, а затем унифицированный интерфейс npruntime, который стал стандартом де-факто.

Прекращение поддержки Большинство современных браузеров отказались от NPAPI по соображениям безопасности и производительности. Ниже перечислены ключевые браузеры, прекратившие поддержку, и даты, когда это произошло:

Google Chrome — поддержка NPAPI прекращена, начиная с версии 45. Mozilla Firefox — поддержка отключена по умолчанию в версии 52 и полностью удалена в версии 53. Apple Safari — поддержка NPAPI удалена, начиная с версии 14. Microsoft Internet Explorer — NPAPI-плагины работали через ActiveX-обёртку (plugin.ocx) до версии 5.5 SP2. В более поздних версиях поддержка была прекращена.

В настоящее время NPAPI сохраняется только в нескольких нишевых браузерах, ориентированных на совместимость со старыми расширениями: Pale Moon и классические версии Waterfox (на базе XUL). Другие браузеры (старые версии Opera, Konqueror, K-Meleon) поддержку NPAPI либо никогда не имели, либо прекратили её развитие вместе с обновлениями.

Безопасность NPAPI и ActiveX часто сравнивают с точки зрения безопасности. Обе технологии выполняют нативный машинный код с привилегиями браузера. Потенциальный ущерб от вредоносного NPAPI-плагина сопоставим с ActiveX-компонентом. Однако есть различия:

NPAPI-плагины обычно работают в контексте учётной записи пользователя, тогда как установка ActiveX-компонентов в старых версиях Windows (XP и ранее) часто требовала прав администратора. В новых версиях Windows эта разница нивелирована, но исторически ActiveX считался более опасным. ActiveX широко использовался не только в браузере, но и в других приложениях Windows, что создавало большую поверхность атаки. NPAPI был ограничен браузерной средой. NPAPI не поддерживал автоматическую установку плагинов. Браузер отображал заглушку и перенаправлял пользователя на страницу загрузки, что затрудняло drive-by-атаки по сравнению с ActiveX, который мог автоматически загружать и устанавливать компоненты из указанного источника (с выдачей предупреждения).

В ранних версиях Firefox (до введения встроенного менеджера плагинов) пользователь при отсутствии плагина направлялся на сайт Netscape. Позднее Firefox стал использовать централизованный репозиторий на addons.mozilla.org, что позволяло устанавливать плагины только из проверенного источника. Тем не менее, NPAPI никогда не обеспечивал изоляции плагинов (песочницы) на уровне операционной системы, что стало одной из причин его отказа в пользу более современных технологий (PPAPI, WebExtensions).

Наследие Начиная с 2013–2014 годов, производители браузеров объявили о поэтапном отказе от NPAPI. Причины: высокая уязвимость плагинов (особенно Adobe Flash и Java), снижение производительности и появление более безопасных альтернатив (например, API расширений на JavaScript). К 2020 году NPAPI был удалён или отключён по умолчанию во всех современных браузерах. Тем не менее, архитектура плагинов оказала значительное влияние на развитие веб-технологий, позволив внедрить поддержку видео, аудио, 3D-графику и другие возможности до появления HTML5.

Примечания

Ссылки Документация по разработке плагинов на Mozilla Developer Center, включая NPAPI API Использование Netscape-плагинов под управлением ActiveX — Замена для plugin.ocx, который был удалён из Internet Explorer. Кросс-платформенная обёртка NPAPI-классов, предоставляемая фреймворком JUCE Книга, обучающая программированию Netscape-плагинов, написанная Zan Oliphant Nixysa: фреймворк, генерирующий код для NPAPI-плагинов. Лицензия Apache 2.0. Учебник NPAPI Разработка Firefox-плагина (Часть два, Часть три) Firebreath — кросс-платформенный фреймворк для разработки NPAPI- и ActiveX-плагинов из одной кодовой базы

Категория:API Категория:Браузеры