Интерфейс прикладного программирования подключаемого модуля Netscape (NPAPI ) - это интерфейс прикладного программирования (API), который позволяет разрабатывать плагины для браузера. Впервые он был разработан для браузеров Netscape, начиная с 1995 года с Netscape Navigator 2.0, но впоследствии был принят другими браузерами. С появлением HTML5 все основные веб-браузеры удалили поддержку сторонних плагинов NPAPI по соображениям безопасности.
В архитектуре NPAPI плагин объявляет типы контента (например, «audio / mp3»), которые он может обрабатывать. Когда браузер обнаруживает тип контента, который не может обработать изначально, он загружает соответствующий плагин, выделяет пространство в контексте браузера для плагина для рендеринга, а затем передает ему данные. Плагин отвечает за рендеринг данных. Плагин запускается на странице внутри, в отличие от старых браузеров, которым приходилось запускать внешнее приложение для обработки неизвестных типов контента. NPAPI требует, чтобы каждый плагин реализовывал и предоставлял примерно 15 функций для инициализации, создания, удаления и позиционирования содержимого плагина. NPAPI также поддерживает сценарии, печать, полноэкранные плагины, плагины без окон и потоковую передачу контента.
NPAPI часто использовался для подключаемых модулей, требующих интенсивной низкоуровневой производительности, таких как видеоплееры, включая Adobe Flash Player и Microsoft Silverlight, а также платформы для веб-приложения, такие как Java Runtime Environment.
Сценарии - это функция, позволяющая коду JavaScript на веб-странице взаимодействовать с плагином. Различные версии Netscape, а затем Mozilla поддерживали эту функцию с использованием различных технологий, включая LiveConnect, XPConnect и NPRuntime.
LiveConnect - это функция веб-браузеров, которая позволяет программному обеспечению Java и JavaScript взаимодействовать внутри веб-страницы. Со стороны Java он позволяет апплету вызывать встроенные сценарии страницы или получать доступ к встроенной среде JavaScript, как и сценарии. И наоборот, со стороны JavaScript он позволяет сценарию вызывать методы апплета или получать доступ к библиотекам времени выполнения Java, так же как и апплеты.
LiveConnect использовался в Netscape 4 для реализации сценариев Плагины NPAPI.
Реализация LiveConnect, зависящая от Open Java Interface, была удалена из дерева исходного кода Mozilla в конце июня 2009 года в рамках работ по очистке Mozilla 2. Он больше не нужен с выпуском переработанной Java Runtime Environment от Sun Microsystems. Однако старая реализация была восстановлена для Gecko 1.9.2, поскольку Apple еще не перенесла новую JRE на Mac OS X.
Функциональность Java – JavaScript, поддерживаемая переработанной средой выполнения Java, по-прежнему называется «LiveConnect». ", несмотря на отказ от подхода, ориентированного на Open Java Interface. В Netscape 4 NPAPI был расширен и теперь позволяет создавать сценарии надстройки. Это расширение называется LiveConnect. Плагин может реализовать класс Java и предоставить его экземпляр. Класс может быть вызван из JavaScript и из Java-апплетов, запущенных на странице.
Недостатком LiveConnect является то, что он сильно привязан к версии Java, встроенной в браузер Netscape. Это не позволяло браузеру использовать другие среды выполнения Java и увеличивало размер загружаемого файла браузера, поскольку для создания сценариев плагинов требовалась Java. Кроме того, LiveConnect сложно программировать: разработчик должен определить класс Java для подключаемого модуля, запустить его через специализированный Java header компилятор и реализовать собственные методы. Обработка строк, исключений и других объектов Java из C ++ неочевидна. Кроме того, LiveConnect использует более ранний и устаревший интерфейс прикладного программирования (API) для вызова собственных вызовов C ++ из Java, называемых JRI. Технология JRI давно была вытеснена JNI.
XPConnect (Cross Platform Connect) - это технология, которая обеспечивает простое взаимодействие между XPCOM и JavaScript.
XPConnect позволяет объектам JavaScript прозрачно получать доступ к объектам XPCOM и управлять ими. Он также позволяет объектам JavaScript представлять XPCOM-совместимые интерфейсы , которые будут вызываться объектами XPCOM. Основная цель состоит в том, чтобы объекты, взаимодействующие с любой стороны интерфейса в стиле XPCOM, обычно не знали или не заботились о языке реализации объекта на другой стороне интерфейса.
Основная причина существования XPConnect заключается в замене рукописного кода, используемого там, где собственный код должен взаимодействовать с кодом JavaScript. Примером может служить модуль DOM.
Полные права по умолчанию предоставляются только скриптам Chrome, то есть скриптам, которые являются частью приложения или расширения. Для удаленных документов HTML / XHTML / XUL большинство объектов XPCOM недоступны для сценариев, поскольку они имеют ограниченные привилегии по соображениям безопасности. Даже если они доступны (например, объект XMLHttpRequest ), обычные ограничения безопасности также могут быть обнаружены (например, невозможно открыть URL-адреса других доменов ).
Mozilla уже использовала XPCOM для определения интерфейсов для многих объектов, реализованных на C ++. Каждый интерфейс определялся файлом IDL и проходил через компилятор IDL, который создавал файлы заголовков и не зависящую от языка библиотеку типов, которая была двоичным представлением интерфейса. Этот двоичный файл описывает интерфейс, методы, параметры, структуры данных и перечисления..
XPConnect использует информацию библиотеки типов для маршалинга вызовов между различными контекстами потоков и между JavaScript и скомпилированным в исходном коде C ++. XPConnect широко используется в Mozilla. Начиная с Netscape 6.1 и Mozilla 0.9.2, NPAPI был расширен, так что плагин мог возвращать сам себе скриптовый интерфейс, а XPConnect маршалировал вызовы к нему из JavaScript и реализации C ++.
XPConnect не имеет зависимости от Java. Однако технология основана на XPCOM. Таким образом, разработчик подключаемого модуля должен быть знаком с подсчетом ссылок, интерфейсами и IDL для реализации сценариев. Зависимость от XPCOM привела к определенным проблемам динамического связывания (например, проблема хрупкого базового класса ), которые необходимо было решить до того, как плагин будет правильно работать с разными браузерами. С тех пор XPCOM был изменен для предоставления статически связанной версии для решения таких проблем. Этот подход также требует, чтобы файл.xpt был установлен рядом с библиотекой динамической компоновки (DLL); в противном случае кажется, что плагин работает, а скрипт - нет, вызывая путаницу.
В конце 2004 года все основные браузерные компании, использующие NPAPI, согласовали NPRuntime как расширение исходного NPAPI для предоставления сценариев через API, который по стилю похож на старый NPAPI в стиле C и не зависит от других браузерных технологий, таких как Java или XPCOM. Он поддерживается только Firefox ESR (расширенная версия поддержки) и Safari.
Из-за возраста API, проблем с безопасностью и принятия альтернативных технологий, таких как HTML5, поставщики программного обеспечения начали постепенно отказываться от поддержки NPAPI в 2013 году.
. Следующий список веб-браузеров поддерживает все плагины NPAPI:
Internet Explorer и браузеры на основе Internet Explorer используют элементы управления ActiveX, документы ActiveX и сценарии ActiveX, чтобы предложить расширяемость внутри страницы наравне с NPAPI. Связанный с Internet Explorer, ActiveX - это технология интеграции, которая позволяет любой компьютерной программе интегрируйте части других компьютерных программ, поддерживающие такую интеграцию. Однако Internet Explorer больше не выпускается, и его замена, Microsoft Edge, не поддерживает ActiveX.
12 августа 2009 года на странице в Google Code был представлен новый проект под названием Pepper со связанным API плагина Pepper (PPAPI); PPAPI - это производная от NPAPI, цель которой - сделать плагины более портативными и безопасными. Это расширение разработано специально для того, чтобы упростить реализацию выполнения внешнего процесса плагина.
PPAPI изначально поддерживался только Google Chrome и Chromium. Позже другие браузеры на основе Chromium, такие как Opera и Vivaldi, добавили поддержку плагина PPAPI.
В феврале 2012 года Adobe Systems объявила, что будущие версии Adobe Flash Player для Linux будут предоставляться только через PPAPI. Предыдущий выпуск Flash Player 11.2 с поддержкой NPAPI будет получать обновления безопасности в течение пяти лет. В августе 2016 года Adobe объявила, что, вопреки своему предыдущему заявлению, она снова будет поддерживать NPAPI Flash Player в Linux и будет продолжать выпускать новые его версии.
В январе 2020 года Google объявил, что поддержка PPAPI будет удалена. из Google Chrome и Chromium в июне 2021 года.