La interfaz de programación de aplicaciones de complementos de Netscape ( NPAPI ) es una interfaz de programación de aplicaciones (API) que permite desarrollar complementos de navegador . Fue desarrollado por primera vez para navegadores Netscape , comenzando en 1995 con Netscape Navigator 2.0, pero posteriormente fue adoptado por otros navegadores. Con la llegada de HTML5 , todos los principales navegadores web han eliminado la compatibilidad con complementos NPAPI de terceros por razones de seguridad. Hay algunos navegadores más pequeños, como Pale Moon y Waterfox Classic, que conservan la compatibilidad con los complementos NPAPI.
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 apropiado, reserva espacio dentro del contexto del navegador para que el complemento lo represente y luego le transmite datos. El complemento es responsable de renderizar 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 secuencias de comandos, impresión, complementos de pantalla completa, complementos sin ventanas y transmisión de contenido.
NPAPI se usaba con frecuencia para complementos que requerían un rendimiento intensivo de bajo nivel, como reproductores de video, incluidos Adobe Flash Player y Microsoft Silverlight , así como plataformas para aplicaciones web como Java Runtime Environment .
Soporte de secuencias de comandos
La secuencia de comandos 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 Mozilla admitieron esta función utilizando diferentes tecnologías, incluidas LiveConnect, XPConnect y NPRuntime.
LiveConnect
LiveConnect es una función 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 incrustados de una página o acceda al entorno JavaScript integrado, al igual que 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, al igual que los subprogramas. [1] [2]
LiveConnect se utilizó en Netscape 4 para implementar la capacidad de secuencia de comandos de los complementos NPAPI.
La implementación de LiveConnect dependiente de la Interfaz Java Abierta se eliminó del árbol de código fuente de Mozilla a fines de junio de 2009 como parte del esfuerzo de limpieza de Mozilla 2 . [3] Ya no es necesario con el lanzamiento de un Java Runtime Environment rediseñado de Sun Microsystems. Sin embargo, la implementación anterior se restauró para Gecko 1.9.2, ya que Apple aún tenía que portar el JRE más nuevo a Mac OS X. [4]
La funcionalidad Java – JavaScript compatible con el Java Runtime Environment rediseñado todavía se llama "LiveConnect", a pesar de que se ha abandonado el enfoque específico de la interfaz Open Java . [5] Con Netscape 4, NPAPI se amplió para permitir la creación de scripts de complementos. Esta extensión se llama LiveConnect. Un complemento podría implementar una clase Java y exponer una instancia de ella . La clase se puede llamar desde JavaScript y desde subprogramas de Java que se ejecutan dentro de la página.
La desventaja de LiveConnect es que está fuertemente ligado a la versión de Java incrustada en el navegador Netscape. Esto impidió que el navegador usara otros tiempos de ejecución de Java y agregó hinchazón al tamaño de descarga del navegador, ya que requería Java para los complementos de script. 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 encabezado 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 desde hace mucho tiempo por JNI .
XPConnect
XPConnect (Cross Platform Connect) es una tecnología que permite la interoperación simple entre XPCOM y JavaScript.
Conexión de objeto
XPConnect permite que los objetos JavaScript accedan y manipulen de forma transparente los 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 ambos lados de una interfaz de estilo XPCOM generalmente no necesitan conocer o preocuparse por el lenguaje de implementación del objeto en el otro lado de la interfaz.
La razón principal de existencia de XPConnect es reemplazar el código escrito a mano que se usa en lugares donde el código nativo necesita interactuar con el código JavaScript. Un ejemplo es el módulo DOM .
Seguridad
Los privilegios completos solo se otorgan de forma predeterminada a los scripts de Chrome, es decir, los scripts que forman parte de la aplicación o de una extensión. Para documentos HTML / XHTML / XUL remotos, los scripts no pueden acceder a la mayoría de los objetos XPCOM 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 estaba usando XPCOM para definir las interfaces de muchos objetos implementados en C ++. Cada interfaz se definió mediante un archivo IDL y se ejecutó a través de un compilador IDL que producía archivos de encabezado y una biblioteca de tipo 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, NPAPI se extendió, de modo que un complemento podría devolver una interfaz programable a sí mismo y XPConnect le enviaría llamadas 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 de complementos debe estar familiarizado con el recuento de referencias , las interfaces y el IDL para implementar secuencias de comandos. La dependencia de XPCOM condujo a ciertos problemas de vinculación dinámica (por ejemplo, el frágil problema de la clase base ) que debían resolverse antes de que el complemento funcionara correctamente con diferentes navegadores. Desde entonces, XPCOM se ha modificado para ofrecer una versión vinculada estáticamente para abordar estos problemas. Este enfoque también requiere que se instale un archivo .xpt junto a la biblioteca de vínculos dinámicos (DLL); de lo contrario, el complemento parece funcionar, pero la secuencia de comandos no, lo que genera confusión.
NPRuntime
A finales de 2004, todas las principales empresas de navegadores que utilizan NPAPI acordaron NPRuntime [6] como una extensión del NPAPI original para proporcionar secuencias de comandos, a través de una API de estilo similar al antiguo NPAPI de estilo C y que es independiente de otros navegadores tecnologías como Java o XPCOM. Solo es compatible con Firefox ESR (versión de soporte extendido) y Safari .
Soporte / desaprobación
Debido a la antigüedad de la API, los problemas de seguridad y la adopción de tecnologías alternativas como HTML5 , los proveedores de software comenzaron a eliminar gradualmente el soporte NPAPI en 2013. [7] [8]
- Las versiones de Internet Explorer 3 a 5.5 SP2 admitían NPAPI, lo que permitía que los complementos que funcionaban en Netscape Navigator funcionaran en Internet Explorer. El soporte llegó a través de un pequeño control ActiveX (llamado " plugin.ocx ") que actuó como un calce entre ActiveX y el complemento NPAPI. Microsoft eliminó el soporte en la versión 5.5 SP2 en adelante por razones de seguridad. [9] [10] [11] [12]
- Google Chrome eliminó permanentemente el soporte NPAPI de todas las plataformas en septiembre de 2015. [13] En septiembre de 2013, Google anunció que eliminaría el soporte NPAPI en su navegador Google Chrome durante 2014, afirmando que "[su] arquitectura de la era de los 90 se ha convertido una de las principales causas de bloqueos, fallos, incidentes de seguridad y complejidad del código ". [14] [15] En mayo de 2014, se eliminó la compatibilidad con NPAPI de la versión Linux de Chrome 35 y posteriores. [16] En abril de 2015, Chrome para Windows y OS X (versiones 42 y posteriores) desactivaron la compatibilidad con NPAPI de forma predeterminada. Sin embargo, hasta septiembre de 2015 (versión 45), los usuarios podían volver a habilitar NPAPI.
- Opera dejó de ser compatible con la versión 37 en mayo de 2016. [ cita requerida ]
- La versión 52.0 de Firefox en marzo de 2017 eliminó todo el soporte para NPAPI excepto para Flash. [17] [18] [19] Mientras tanto, el canal ESR conservó el soporte general para esta función, siendo la versión 52esr el último recurso NPAPI. Firefox 69.0 deshabilitó Flash NPAPI de forma predeterminada. [20] [21] En Firefox 85.0, lanzado en enero de 2021, la compatibilidad con NPAPI se eliminó por completo. [22] [23]
- Safari ha eliminado el soporte para todos los complementos NPAPI excepto Flash con la versión 12 lanzada en septiembre de 2018. [24] El soporte Flash se ha eliminado de Safari 14, lanzado en septiembre de 2020. [25]
- SeaMonkey [26] dejó de admitir complementos NPAPI desde la versión 2.53.1, con la excepción de Flash. El soporte NPAPI se eliminó por completo en SeaMonkey 2.53.7, lanzado en marzo de 2021. [27]
La siguiente lista de navegadores web admite todos los complementos NPAPI:
- 360 Secure Browser ( chino : 360 安全 浏览 器) o 360 Extreme Explorer ( chino : 360 极速 浏览 器) [28]
- Basilisco [29]
- K-Meleon [30] ( motor de Goanna ) [31]
- Pale Moon [32] (Hoja de ruta futura de Pale Moon ) [33]
- Uzbl [34]
- Waterfox (que permite la ejecución de todos los complementos NPAPI de 64 bits) [35]
Tecnologías similares
ActiveX
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 a la par con 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. [36] Internet Explorer, sin embargo, está descontinuado y su reemplazo, Microsoft Edge, no es compatible con ActiveX.
PPAPI
El 12 de agosto de 2009, una página en Google Code [37] presentó un nuevo proyecto llamado Pepper, con la API de complemento Pepper asociada (PPAPI); [38] PPAPI es un derivado de NPAPI destinado a hacer que los complementos sean más portátiles y más seguros. [39] Esta extensión está diseñada específicamente para facilitar la implementación de la ejecución de complementos fuera de proceso .
PPAPI inicialmente solo era compatible con Google Chrome y Chromium . Más tarde, otros navegadores basados en Chromium como Opera y Vivaldi agregaron compatibilidad con el complemento PPAPI.
En febrero de 2012, Adobe Systems anunció que las futuras versiones de Linux de Adobe Flash Player 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. [40] En agosto de 2016, Adobe anunció que, contrariamente a su declaración anterior, volvería a admitir NPAPI Flash Player en Linux y seguiría lanzando nuevas versiones. [41]
En agosto de 2020, Google anunció que la compatibilidad con PPAPI se eliminaría de Google Chrome y Chromium en junio de 2022. [42]
Ver también
- Interfaz de programación de aplicaciones del servidor Netscape (NSAPI)
Referencias
- ^ Flanagan, David. (2006). JavaScript: la guía definitiva. O'Reilly, Sebastopol, California.
- ^ Para obtener detalles técnicos, consulte la documentación para desarrolladores de Mozilla en LiveConnect .
- ^ "442399 - eliminar LiveConnect del árbol" . mozilla.org .
- ^ "517355 - Restaurar OJI, Liveconnect y el JEP en la rama 1.9.2 en OS X" . mozilla.org .
- ^ "Notas de la versión para la tecnología de complemento Java ™ de próxima generación (introducida en la actualización 10 de Java SE 6)" . sun.com .
- ^ "Complementos de secuencias de comandos" . Red de desarrolladores de Mozilla .
- ^ "Cambio en la compatibilidad con los complementos de Acrobat y Reader en los navegadores web modernos" . Adobe . 8 de febrero de 2016.
- ^ "Oracle desaprueba el complemento del navegador Java, se prepara para su desaparición" . Ars Technica . 28 de enero de 2016 . Consultado el 15 de abril de 2016 .
- ^ "Los complementos de estilo Netscape no funcionan después de actualizar Internet Explorer" . Soporte (3.3 ed.). Microsoft . 27 de julio de 2007.
- ^ Giannandrea, J. (4 de septiembre de 2001). "Microsoft rompe los complementos web en Windows XP" . meer.net . Archivado desde el original el 16 de octubre de 2007.
- ^ "Descripción de la compatibilidad de Internet Explorer con complementos de estilo Netscape" . Soporte (3.4 ed.). Microsoft . 31 de enero de 2007.
- ^ "Boletín de seguridad de Microsoft MS03-015 - Crítico" . Security TechCenter . Microsoft . 23 de abril de 2003.
- ^ " La cuenta regresiva final para NPAPI ". Blog de Chromium .
- ^ Google comenzará a bloquear la mayoría de los complementos de API de complemento de Netscape en enero de 2014, incluirá Silverlight, Unity y otros en la lista blanca ". TechCrunch . 23 de septiembre de 2013.
- ^ " Google busca eliminar la compatibilidad con la API de complementos de Netscape en Chrome, comenzando con el bloqueo de la mayoría de los complementos en enero de 2014 ". La próxima web . 23 de septiembre de 2013.
- ^ " Actualización sobre la desaprobación de NPAPI ". Blog de Chromium . 27 de mayo de 2014.
- ^ "Firefox 52.0, vea todas las funciones nuevas, actualizaciones y correcciones" . Mozilla .
- ^ "Firefox eliminará los complementos NPAPI a finales de 2016, excepto Flash" . Compatibilidad con el sitio de Firefox . 4 de octubre de 2016 . Consultado el 25 de enero de 2017 .
- ^ "¿Por qué Java, Silverlight, Adobe Acrobat y otros complementos ya no funcionan?" . Soporte de Mozilla . Archivado desde el original el 7 de marzo de 2017 . Consultado el 6 de marzo de 2017 .
- ^ "1519434 - Desactiva la compatibilidad con Flash de forma predeterminada en Firefox 69" . bugzilla.mozilla.org . Consultado el 14 de enero de 2019 .
- ^ "Firefox 69: Flash desactivado por defecto - gHacks Tech News" . www.ghacks.net . Consultado el 14 de enero de 2019 .
- ^ Jim Mathies (13 de noviembre de 2020). "Eliminación de la compatibilidad con el complemento NPAPI en Firefox 85" . mozilla.dev.platform (a través de Grupos de Google) . Consultado el 10 de febrero de 2021 .
- ^ "Hoja de ruta de complementos para Firefox" . MDN . 19 de enero de 2021. Archivado desde el original el 21 de enero de 2021 . Consultado el 10 de febrero de 2021 .
- ^ Clover, Juli (17 de septiembre de 2018). "Apple lanza Safari 12 para macOS Sierra y macOS High Sierra" . MacRumors .
- ^ "Notas de la versión de Safari 14" . Documentación para desarrolladores de Apple .
- ^ "¿Por qué Oracle Java, Microsoft Silverlight, Adobe Acrobat Reader y otros complementos ya no funcionan?" Complementos NPAPI
- ^ "Notas de la versión de SeaMonkey 2.53.7" . Consultado el 14 de marzo de 2021 .
- ^ "NPAPI 是 重型 武器 , 当 别的 方法 无法 到达 你 的 目的 时 , 才 建议 使用。" . NPAPI 插件.
- ^ "Soporte para todos los complementos NPAPI (Unity, Silverlight, Flash, Java, complementos de autenticación, etc.)" . Características del basilisco.
- ^ "La mayoría de los complementos de terceros diseñados para Mozilla / Netscape también funcionarán con K-Meleon" . Complementos de terceros.
- ^ "Cargar todos los complementos NPAPI, Java, Silverlight, etc." K-Meleon Hybrid (Goanna sobre Pro).
- ^ " Soporte completo y continuo para complementos NPAPI (Java, Silverlight, etc.) ". Pale Moon: Detalles técnicos
- ^ "Pale Moon admite complementos NPAPI. A diferencia de Firefox, no desaprobaremos ni eliminaremos el soporte para este tipo de complementos" . Hoja de ruta futura de Pale Moon.
- ^ "Usamos la arquitectura de complementos NPAPI (al igual que Mozilla), así que simplemente instale los complementos normalmente, y todo debería funcionar" . Preguntas frecuentes sobre Uzbl.
- ^ " Deben usarse de manera responsable, pero Waterfox aún admite el uso de complementos de Java y Silverlight, así como cualquier otro complemento NPAPI de 64 bits . Soporte para complementos NPAPI.
- ^ "Descripción de tecnologías ActiveX" . Soporte . Microsoft . 19 de enero de 2007.
- ^ "ppapi" . Código de Google . Archivado desde el original el 2 de julio de 2010.
- ^ "Introducción: antecedentes y conceptos básicos: los proyectos de Chromium" . chromium.org .
- ^ "Conceptos - ppapi - Conceptos importantes para trabajar con PPAPI. - API Pepper Plugin - Google Project Hosting" . google.com .
- ^ "Asociación de Adobe y Google para Flash Player en Linux" . adobe.com . Archivado desde el original el 23 de febrero de 2012 . Consultado el 7 de marzo de 2012 .
- ^ Campbell, Chris (31 de agosto de 2016). "Beta News - Flash Player NPAPI para Linux" . Blog del equipo de Adobe AIR y Adobe Flash Player . Adobe Systems . Consultado el 8 de septiembre de 2016 .
- ^ Anthony Laforge (10 de agosto de 2020). "Cambios en el cronograma de compatibilidad de aplicaciones de Chrome" . Blog de Chromium .
enlaces externos
- Documentación de desarrollo de complementos en Mozilla Developer Center, incluida la API NPAPI
- Un control ActiveX que aloja complementos , un reemplazo para plugin.ocx que se eliminó de Internet Explorer.
- Libro sobre programación de complementos de Netscape por Zan Oliphant
- Nixysa: un marco de generación de código de pegamento para complementos NPAPI. Licencia de Apache 2.0.
- Tutorial NPAPI Creación de un complemento de Firefox ( Parte dos , Parte tres , Parte cuatro )
- Documentación de extensiones de Opera 15+