La interfaz de programación de aplicaciones de complementos de Netscape ( NPAPI ) es una interfaz de programación de aplicaciones (API) obsoleta para complementos de navegadores web , desarrollada inicialmente para Netscape Navigator 2.0 en 1995 y posteriormente adoptada por otros navegadores.
En la arquitectura NPAPI, un complemento declara los tipos de contenido (por ejemplo, "audio/mp3") que puede manejar. Cuando el navegador encuentra un tipo de contenido que no puede manejar de forma nativa, carga el complemento adecuado, reserva espacio dentro del contexto del navegador para que el complemento lo represente y luego le transmite los datos. El complemento es responsable de representar los datos. El complemento se ejecuta en el lugar dentro de la página, a diferencia de los navegadores más antiguos que tenían que iniciar una aplicación externa para manejar tipos de contenido desconocidos. NPAPI requiere que cada complemento implemente y exponga aproximadamente 15 funciones para inicializar, crear, eliminar y posicionar el contenido del complemento. NPAPI también admite scripts, impresión, complementos de pantalla completa, complementos sin ventanas y transmisión de contenido.
NPAPI se usaba frecuentemente para complementos que requerían un rendimiento intensivo y de bajo nivel, como reproductores de video, incluidos Adobe Flash Player y Microsoft Silverlight , así como plataformas para aplicaciones web como Java Runtime Environment .
La compatibilidad con NPAPI entre los principales navegadores comenzó a disminuir en 2015 y se fue descontinuando gradualmente durante los siguientes 7 años. Todos los principales navegadores web eliminaron la compatibilidad con complementos NPAPI de terceros por razones de seguridad y mantenimiento mientras exista tecnología superior. [1]
La creación de scripts es una función que permite que el código JavaScript de una página web interactúe con el complemento. Varias versiones de Netscape y luego de Mozilla admitieron esta función mediante diferentes tecnologías, incluidas LiveConnect, XPConnect y NPRuntime.
LiveConnect es una característica de los navegadores web que permite que el software Java y JavaScript se comuniquen entre sí dentro de una página web. Desde el lado de Java, permite que un subprograma invoque los scripts integrados de una página o acceda al entorno JavaScript integrado, de forma muy similar a como lo hacen los scripts. Por el contrario, desde el lado de JavaScript, permite que un script invoque métodos de subprograma o acceda a bibliotecas de tiempo de ejecución de Java, de forma muy similar a como lo hacen los subprogramas. [2] [3]
LiveConnect se utilizó en Netscape 4 para implementar la capacidad de creación de scripts de complementos NPAPI.
La implementación de LiveConnect, dependiente de Open Java Interface, fue eliminada del árbol de código fuente de Mozilla a fines de junio de 2009 como parte del esfuerzo de limpieza de Mozilla 2. [4] Ya no es necesaria con el lanzamiento de un entorno de ejecución Java rediseñado de Sun Microsystems. Sin embargo, la implementación anterior fue restaurada para Gecko 1.9.2, ya que Apple aún no había portado el JRE más nuevo a Mac OS X. [5]
La funcionalidad Java–JavaScript compatible con el entorno de ejecución Java rediseñado todavía se llama "LiveConnect", a pesar de que se abandonó el enfoque específico de la interfaz Open Java . [6] Con Netscape 4, NPAPI se amplió para permitir la creación de scripts para los complementos. Esta extensión se llama LiveConnect. Un complemento podría implementar una clase Java y exponer una instancia de la misma . La clase podría llamarse desde JavaScript y desde applets Java que se ejecutan dentro de la página.
La desventaja de LiveConnect es que está fuertemente ligado a la versión de Java incorporada en el navegador Netscape. Esto impedía que el navegador usara otros entornos de ejecución de Java y añadía volumen al tamaño de descarga del navegador, ya que requería Java para ejecutar los complementos. Además, LiveConnect es complicado de programar: el desarrollador tiene que definir una clase Java para el complemento, ejecutarlo a través de un compilador de encabezados Java especializado e implementar métodos nativos . El manejo de cadenas , excepciones y otros objetos Java desde C++ no es obvio. Además, LiveConnect utiliza una interfaz de programación de aplicaciones (API) anterior y ahora obsoleta para invocar llamadas nativas de C++ desde Java, llamada JRI. La tecnología JRI ha sido suplantada hace mucho tiempo por JNI .
XPConnect (Cross Platform Connect) es una tecnología que permite una interoperabilidad sencilla entre XPCOM y JavaScript.
XPConnect permite que los objetos JavaScript accedan y manipulen de forma transparente objetos XPCOM. También permite que los objetos JavaScript presenten interfaces compatibles con XPCOM para que sean llamadas por objetos XPCOM. Un objetivo principal es que los objetos que se comunican desde cualquier lado de una interfaz de estilo XPCOM no deban saber o preocuparse por el lenguaje de implementación del objeto del otro lado de la interfaz.
La razón principal de ser de XPConnect es reemplazar el código escrito a mano que se utiliza en lugares donde el código nativo necesita interactuar con el código JavaScript. Un ejemplo es el módulo DOM .
De forma predeterminada, los privilegios completos solo se conceden a los scripts de Chrome, es decir, a los scripts que forman parte de la aplicación o de una extensión. En el caso de los documentos HTML / XHTML / XUL remotos , la mayoría de los objetos XPCOM no son accesibles a los scripts, ya que tienen privilegios limitados por razones de seguridad. Incluso si son accesibles (por ejemplo, el objeto XMLHttpRequest ), también se pueden encontrar las restricciones de seguridad habituales (por ejemplo, no se pueden abrir URL de otros dominios ).
Mozilla ya utilizaba XPCOM para definir las interfaces de muchos objetos implementados en C++. Cada interfaz se definía mediante un archivo IDL y se ejecutaba a través de un compilador IDL que generaba archivos de encabezado y una biblioteca de tipos independiente del lenguaje que era una representación binaria de la interfaz. Este binario describía la interfaz, los métodos, los parámetros, las estructuras de datos y las enumeraciones .
XPConnect utiliza la información de la biblioteca de tipos para ordenar las llamadas entre diferentes contextos de subprocesos y entre JavaScript y C++ compilado de forma nativa. XPConnect se utiliza ampliamente en Mozilla. A partir de Netscape 6.1 y Mozilla 0.9.2, se amplió NPAPI, de modo que un complemento pudiera devolverse una interfaz programable a sí mismo y XPConnect ordenara las llamadas a él desde JavaScript y la implementación de C++.
XPConnect no tiene dependencia de Java. Sin embargo, la tecnología se basa en XPCOM. Por lo tanto, el desarrollador del complemento debe estar familiarizado con el recuento de referencias , las interfaces y el IDL para implementar la creación de scripts. La dependencia de XPCOM generó ciertos problemas de enlaces dinámicos (por ejemplo, el problema de la clase base frágil ) que tuvieron que resolverse antes de que el complemento funcionara correctamente con diferentes navegadores. Desde entonces, XPCOM se modificó para proporcionar una versión enlazada estáticamente para abordar dichos problemas. Este enfoque también requiere que se instale un archivo .xpt junto a la biblioteca de enlaces dinámicos (DLL); de lo contrario, el complemento parece funcionar, pero los scripts no, lo que genera confusión.
A finales de 2004, todas las principales empresas de navegadores que utilizan NPAPI acordaron que NPRuntime [7] fuera una extensión de la NPAPI original para proporcionar scripts, a través de una API que es similar en estilo a la antigua NPAPI de estilo C y es independiente de otras tecnologías de navegador como Java o XPCOM. Solo es compatible con Firefox ESR (Extended Support Release) y Safari .
Debido a la antigüedad de la API, los problemas de seguridad y la adopción de tecnologías alternativas como HTML5 , muchos proveedores de software comenzaron a eliminar gradualmente el soporte de NPAPI en 2013. [8] [9]
Las versiones 3 a 5.5 SP2 de Internet Explorer admitían NPAPI, lo que permitía que los complementos que funcionaban en Netscape Navigator también lo hicieran en Internet Explorer. La compatibilidad se proporcionaba a través de un pequeño control ActiveXplugin.ocx
(llamado " ") que actuaba como un complemento entre ActiveX y el complemento NPAPI. Microsoft dejó de ofrecer compatibilidad a partir de la versión 5.5 SP2 por razones de seguridad. [10] [11] [12] [13]
En septiembre de 2015, Google Chrome eliminó de forma permanente la compatibilidad con NPAPI en todas las plataformas. [14] En septiembre de 2013, Google anunció que eliminaría gradualmente la compatibilidad con NPAPI en su navegador Google Chrome durante 2014, afirmando que "su arquitectura de la era de los 90 se ha convertido en una de las principales causas de bloqueos, fallas, incidentes de seguridad y complejidad del código". [15] [16] En mayo de 2014, se eliminó la compatibilidad con NPAPI de la versión Linux de Chrome 35 y posteriores. [17] En abril de 2015, Chrome para Windows y OS X (versiones 42 y posteriores) desactivó la compatibilidad con NPAPI de forma predeterminada. Sin embargo, hasta septiembre de 2015 (versión 45), los usuarios podían volver a habilitar NPAPI. [ cita requerida ]
Opera dejó de brindar soporte a la versión 37 en mayo de 2016. [ cita requerida ]
La versión 52.0 de Mozilla Firefox en marzo de 2017 eliminó todo el soporte para NPAPI excepto para Flash. [18] [19] [20] Mientras tanto, el canal ESR mantuvo el soporte general para esta función, siendo la versión 52 ESR el último recurso para NPAPI. Firefox 69.0 deshabilitó la NPAPI de Flash de forma predeterminada. [21] [22] En Firefox 85.0, lanzado en enero de 2021, se eliminó por completo la compatibilidad con NPAPI. [23] [24] En el canal ESR, la compatibilidad con Flash NPAPI finalizó con la versión 78.15.0, lanzada en octubre de 2021. [25] [26]
Safari ha dejado de ofrecer soporte para todos los complementos NPAPI excepto Flash con la versión 12 lanzada en septiembre de 2018. [27] La compatibilidad con Flash se ha eliminado de Safari 14, lanzada en septiembre de 2020. [28]
SeaMonkey [29] dejó de admitir complementos NPAPI a partir de la versión 2.53.1, con la excepción de Flash. La compatibilidad con NPAPI se eliminó por completo en SeaMonkey 2.53.7, lanzada en marzo de 2021. [30]
La siguiente lista de navegadores web admiten todos los complementos NPAPI:
Internet Explorer y los navegadores basados en Internet Explorer utilizan controles ActiveX, documentos ActiveX y secuencias de comandos ActiveX para ofrecer una extensibilidad en la página equivalente a NPAPI. Aunque comúnmente se asocia con Internet Explorer, ActiveX es una tecnología de integración que permite que cualquier programa informático integre partes de otros programas informáticos que admitan dicha integración. [38] Sin embargo, Internet Explorer se ha discontinuado y su reemplazo, Microsoft Edge, no admite ActiveX.
El 12 de agosto de 2009, una página en Google Code [39] presentó un nuevo proyecto llamado Pepper, con la API de complemento Pepper asociada (PPAPI); [40] PPAPI es un derivado de NPAPI destinado a hacer que los complementos sean más portátiles y más seguros. [41] Esta extensión está diseñada específicamente para facilitar la implementación de la ejecución de complementos fuera de proceso .
Al principio, PPAPI solo era compatible con Google Chrome y Chromium . Más tarde, otros navegadores basados en Chromium, como Opera y Vivaldi, añadieron compatibilidad con el complemento PPAPI.
En febrero de 2012, Adobe Systems anunció que las futuras versiones de Adobe Flash Player para Linux se proporcionarían únicamente a través de PPAPI. La versión anterior, Flash Player 11.2, con soporte NPAPI, recibiría actualizaciones de seguridad durante cinco años. [42] En agosto de 2016, Adobe anunció que, contrariamente a su declaración anterior, volvería a ofrecer soporte para Flash Player NPAPI en Linux y seguiría lanzando nuevas versiones del mismo. [43]
En agosto de 2020, Google anunció que el soporte para PPAPI se eliminaría de Google Chrome y Chromium en junio de 2022. [44]