Articulo de referencia

NPAPI

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...

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 correspondiente, reserva espacio dentro del contexto del navegador para que el complemento lo renderice y luego le transmite los datos. El complemento es responsable de renderizar los datos. El complemento se ejecuta directamente en la página, a diferencia de los navegadores 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 ventana y transmisión de contenido.

NPAPI se utilizaba con frecuencia para complementos que requerían un rendimiento intensivo de bajo nivel, como reproductores de vídeo, incluidos Adobe Flash Player y Microsoft Silverlight , así como plataformas para aplicaciones web como el entorno de ejecución de Java .

El soporte para NPAPI en los principales navegadores comenzó a disminuir desde 2015 y se fue eliminando gradualmente durante los siguientes 7 años. Todos los principales navegadores web han eliminado el soporte para complementos NPAPI de terceros por razones de seguridad y mantenimiento. [ 1 ]

Historia

El origen de la API de complementos de Netscape no se remonta a Netscape, sino a Adobe Systems, como se describe en el libro de Mattias Andersson, PDF Printing and Publishing. [ 2 ] El director ejecutivo de Adobe, John Warnock, y el desarrollador de Acrobat, Allan Padgett, buscaban una forma de llevar el PDF más allá del escritorio, y el lanzamiento de Navigator por parte de Netscape les brindó esa oportunidad. Padgett y su colega, el ingeniero Eshwar Priyadarshan, realizaron ingeniería inversa del navegador Netscape para que los archivos PDF aparecieran como elementos web nativos, abriéndose dentro de Navigator al hacer clic. Su demostración se presentó a Warnock y al director ejecutivo de Netscape, Jim Clark.

Si bien Clark estaba deseoso de incorporar "Allan's Hack" a Navigator, Padgett propuso una alternativa: una arquitectura de complementos que permitiera tratar cualquier tipo de archivo como un formato nativo. Los ingenieros de Adobe, Gordon Dow y Nabeel Al-Shamma, habían añadido recientemente una arquitectura de complementos a Acrobat para que terceros pudieran extender las funcionalidades de PDF. Clark estuvo de acuerdo y Netscape se puso manos a la obra para diseñar una API que soportara ese modelo.

Soporte para scripts

La función de scripting permite que el código JavaScript de una página web interactúe con el plugin. Varias versiones de Netscape y posteriormente de Mozilla admitieron esta función mediante diferentes tecnologías, como LiveConnect, XPConnect y NPRuntime.

Conexión en vivo

LiveConnect es una función de los navegadores web que permite la comunicación entre software Java y JavaScript dentro de una página web. La primera versión de LiveConnect fue desarrollada por un estudiante de posgrado en prácticas en la Universidad Carnegie Mellon (CMU). [ 3 ] Desde el lado de Java, permite que un applet invoque los scripts integrados de una página o acceda al entorno JavaScript integrado, al igual que los scripts. A la inversa, desde el lado de JavaScript, permite que un script invoque métodos de applets o acceda a las bibliotecas de tiempo de ejecución de Java, al igual que los applets. [ 4 ] [ 5 ]

LiveConnect se utilizó en Netscape 4 para implementar la capacidad de programación de scripts de los complementos NPAPI.

La implementación de LiveConnect, que dependía de Open Java Interface, se eliminó del código fuente de Mozilla a finales de junio de 2009 como parte del proceso de limpieza de Mozilla 2. [ 6 ] Ya no es necesaria tras el lanzamiento de un Java Runtime Environment rediseñado por Sun Microsystems. Sin embargo, la antigua implementación se restauró para Gecko 1.9.2, ya que Apple aún no había adaptado el JRE más reciente a Mac OS X. [ 7 ]

La funcionalidad Java-JavaScript compatible con el rediseñado Entorno de ejecución de Java (JEE) sigue llamándose "LiveConnect", a pesar de que se abandonó el enfoque específico de Open Java Interface . [ 8 ] Con Netscape 4, NPAPI se amplió para permitir la creación de scripts para los complementos. Esta extensión se llama LiveConnect. Un complemento podía implementar una clase Java y exponer una instancia de la misma . La clase podía ser llamada desde applets de JavaScript y Java que se ejecutaban dentro de la página.

La desventaja de LiveConnect es que está fuertemente ligado a la versión de Java integrada en el navegador Netscape. Esto impedía que el navegador utilizara otros entornos de ejecución de Java y aumentaba el tamaño de descarga, ya que requería Java para la ejecución de scripts de complementos. Además, LiveConnect es difícil de programar: el desarrollador debe definir una clase Java para el complemento, procesarla con un compilador de encabezados Java especializado e implementar métodos nativos . El manejo de cadenas , excepciones y otros objetos Java desde C++ no es intuitivo. Asimismo, 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 fue reemplazada hace tiempo por JNI .

XPConnect

XPConnect (Cross Platform Connect) es una tecnología que permite una interoperabilidad sencilla entre XPCOM y JavaScript.

Conexión de objetos

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 otros objetos XPCOM las invoquen. Un objetivo principal es que los objetos que se comunican desde cualquier lado de una interfaz de estilo XPCOM no necesiten conocer ni preocuparse por el lenguaje de implementación del objeto que se encuentra al otro lado de la interfaz.

La principal razón de ser de XPConnect es reemplazar el código escrito a mano que se utiliza en aquellos casos en los que el código nativo necesita interactuar con el código JavaScript. Un ejemplo de ello es el módulo DOM .

Seguridad

Los privilegios completos se otorgan por defecto solo a los scripts de Chrome, es decir, a los scripts que forman parte de la aplicación o de una extensión. Para los documentos HTML / XHTML / XUL remotos , la mayoría de los objetos XPCOM no son accesibles para los scripts, ya que tienen privilegios limitados por motivos 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 , que se procesaba a través de un compilador IDL que generaba archivos de cabecera y una biblioteca de tipos independiente del lenguaje, la cual 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 gestionar 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 devolver una interfaz programable para sí mismo y XPConnect gestionara las llamadas desde JavaScript y la implementación de C++.

XPConnect no depende de Java. Sin embargo, la tecnología se basa en XPCOM. Por lo tanto, el desarrollador del complemento debe estar familiarizado con el conteo de referencias , las interfaces y IDL para implementar la programación. La dependencia de XPCOM generó ciertos problemas de enlace dinámico (por ejemplo, el problema de la clase base frágil ) que debían resolverse para que el complemento funcionara correctamente con diferentes navegadores. Desde entonces, XPCOM se ha modificado para proporcionar una versión con enlace estático que soluciona estos problemas. Este enfoque también requiere la instalación de un archivo .xpt junto a la biblioteca de enlace dinámico (DLL); de lo contrario, el complemento parece funcionar, pero la programación no, lo que genera confusión.

NPRuntime

A finales de 2004, todas las principales compañías de navegadores que utilizaban NPAPI acordaron NPRuntime [ 9 ] como una extensión del NPAPI original para proporcionar scripts, a través de una API que es similar en estilo al antiguo 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 .

Apoyo

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 para NPAPI en 2013. [ 10 ] [ 11 ]

Internet Explorer

Las versiones de Internet Explorer de la 3 a la 5.5 SP2 admitían NPAPI, lo que permitía que los complementos que funcionaban en Netscape Navigator funcionaran en Internet Explorer. La compatibilidad se proporcionaba mediante un pequeño control ActiveX (llamado " plugin.ocx") que actuaba como un intermediario entre ActiveX y el complemento NPAPI. Microsoft dejó de admitir esta compatibilidad a partir de la versión 5.5 SP2 por motivos de seguridad. [ 12 ] [ 13 ] [ 14 ] [ 15 ]

Google Chrome

Google Chrome eliminó permanentemente todo el soporte NPAPI de todas las plataformas en septiembre de 2015. [ 16 ] En septiembre de 2013, Google anunció que eliminaría gradualmente el soporte NPAPI en su navegador Google Chrome durante 2014, afirmando que "[su] arquitectura de la década de los 90 se ha convertido en una causa principal de bloqueos, fallos, incidentes de seguridad y complejidad del código". [ 17 ] [ 18 ] En mayo de 2014, se eliminó el soporte NPAPI de la versión de Linux de Chrome 35 y posteriores. [ 19 ] En abril de 2015, Chrome para Windows y OS X (versiones 42 y posteriores) deshabilitó el soporte NPAPI de forma predeterminada. Sin embargo, hasta septiembre de 2015 (versión 45), los usuarios podían volver a habilitar NPAPI.

Ópera

Opera dejó de ofrecer soporte para esta función con la versión 37 en mayo de 2016.

Firefox

La versión 52.0 de Mozilla Firefox , lanzada en marzo de 2017, eliminó toda la compatibilidad con NPAPI, excepto para Flash. [ 20 ] [ 21 ] [ 22 ] Mientras tanto, el canal ESR mantuvo la compatibilidad general con esta función, siendo la versión 52 ESR el último recurso para NPAPI. Firefox 69.0 deshabilitó Flash NPAPI de forma predeterminada. [ 23 ] [ 24 ] En Firefox 85.0, lanzado en enero de 2021, se eliminó por completo la compatibilidad con NPAPI. [ 25 ] [ 26 ] En el canal ESR, la compatibilidad con Flash NPAPI finalizó con la versión 78.15.0, lanzada en octubre de 2021. [ 27 ] [ 28 ]

Safari

Safari dejó de ser compatible con todos los complementos NPAPI, excepto Flash, con la versión 12, lanzada en septiembre de 2018. [ 29 ] La compatibilidad con Flash se eliminó de Safari 14, lanzado en septiembre de 2020. [ 30 ]

SeaMonkey

SeaMonkey [ 31 ] 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, lanzado en marzo de 2021. [ 32 ]

Apoyo

La siguiente lista de navegadores web admite todos los complementos NPAPI:

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 comparable a la de 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. [ 40 ] Sin embargo, Internet Explorer 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 [ 41 ] presentó un nuevo proyecto llamado Pepper, con la API de complementos Pepper (PPAPI) asociada; [ 42 ] PPAPI es un derivado de NPAPI destinado a hacer que los complementos sean más portátiles y más seguros. [ 43 ] Esta extensión está diseñada específicamente para facilitar la implementación de la ejecución de complementos fuera del proceso .

Inicialmente, PPAPI solo era compatible con Google Chrome y Chromium . Posteriormente, otros navegadores basados ​​en Chromium, como Opera y Vivaldi, añadieron compatibilidad con complementos PPAPI.

En febrero de 2012, Adobe Systems anunció que las futuras versiones de Adobe Flash Player para Linux solo se distribuirían a través de PPAPI. La versión anterior, Flash Player 11.2, con soporte para NPAPI, recibiría actualizaciones de seguridad durante cinco años. [ 44 ] En agosto de 2016, Adobe anunció que, contrariamente a su declaración anterior, volvería a ofrecer soporte para Flash Player con NPAPI en Linux y continuaría lanzando nuevas versiones. [ 45 ]

En agosto de 2020, Google anunció que el soporte para PPAPI se eliminaría de Google Chrome y Chromium en junio de 2022. [ 46 ]

Véase también

Referencias

  1. Costlow, Erik (15 de marzo de 2021). "El fin de los applets" . InfoQ . Consultado el 2 de octubre de 2021 .
  2. Andersson, Mattias; Romano, Frank J. (1997). Amazon.com . Micro Publishing Press. ISBN 0941845222.
  3. "Brendan Eich: JavaScript, Firefox, Mozilla y Brave" . YouTube . 12 de febrero de 2021. Consultado el 24 de marzo de 2025. Según lo declarado por Brendan Eich en el podcast de Lex Fridman .
  4. Flanagan, David. (2006). JavaScript: La guía definitiva. O'Reilly, Sebastopol, California.
  5. Para obtener detalles técnicos, consulte la documentación para desarrolladores de Mozilla sobre LiveConnect, archivada el 14 de mayo de 2008 en Wayback Machine .
  6. "442399 – eliminar LiveConnect del árbol" . mozilla.org .
  7. "517355 – Restaurar OJI, Liveconnect y JEP en la rama 1.9.2 en OS X" . mozilla.org .
  8. "Notas de la versión de la tecnología de complementos Java™ de próxima generación (introducida en Java SE 6 actualización 10)" . sun.com .
  9. "Complementos de scripting" . Red de desarrolladores de Mozilla . Archivado del original el 18 de noviembre de 2008. Consultado el 29 de agosto de 2009 .
  10. "Cambios en la compatibilidad con los complementos de Acrobat y Reader en los navegadores web modernos" . Adobe . 8 de febrero de 2016.
  11. "Oracle deja de dar soporte al complemento de navegador Java y se prepara para su desaparición" . Ars Technica . 28 de enero de 2016. Consultado el 15 de abril de 2016 .
  12. "Los complementos de estilo Netscape no funcionan después de actualizar Internet Explorer" . Soporte (ed. 3.3 ). Microsoft . 27 de julio de 2007. 
  13. Giannandrea, J. (4 de septiembre de 2001). "Microsoft rompe los complementos web en Windows XP" . meer.net . Archivado del original el 16 de octubre de 2007.
  14. "Descripción de la compatibilidad de Internet Explorer con los complementos de estilo Netscape" . Soporte ( ed. 3.4). Microsoft . 31 de enero de 2007. 
  15. "Boletín de seguridad de Microsoft MS03-015 – Crítico" . Centro de tecnología de seguridad . Microsoft . 23 de abril de 2003.
  16. " La cuenta regresiva final para NPAPI ". Blog de Chromium .
  17. Google comenzará a bloquear la mayoría de los complementos de la API de Netscape Plug-In en enero de 2014, y permitirá el uso de Silverlight, Unity y otros . TechCrunch . 23 de septiembre de 2013.
  18. " Google planea dejar de ofrecer soporte para la API de complementos de Netscape en Chrome, comenzando con el bloqueo de la mayoría de los complementos en enero de 2014 ". The Next Web . 23 de septiembre de 2013.
  19. " Actualización sobre la descontinuación de NPAPI ". Blog de Chromium . 27 de mayo de 2014.
  20. "Firefox 52.0, vea todas las nuevas funciones, actualizaciones y correcciones" . Mozilla .
  21. "Firefox dejará de admitir complementos NPAPI a finales de 2016, excepto Flash" . Compatibilidad de sitios de Firefox . 4 de octubre de 2016. Archivado del original el 15 de marzo de 2017. Consultado el 25 de enero de 2017 .
  22. "¿Por qué Java, Silverlight, Adobe Acrobat y otros complementos ya no funcionan?" . Soporte de Mozilla . Archivado del original el 7 de marzo de 2017 . Consultado el 6 de marzo de 2017 .
  23. "1519434 - Deshabilitar la compatibilidad con Flash por defecto en Firefox 69" . bugzilla.mozilla.org . Consultado el 14 de enero de 2019 .
  24. "Hoja de ruta de complementos para Firefox - Complementos" . MDN Web Docs . Consultado el 12 de julio de 2021 .
  25. Jim Mathies (13 de noviembre de 2020). "Eliminación del soporte para complementos NPAPI en Firefox 85" . mozilla.dev.platform (a través de Google Groups) . Consultado el 10 de febrero de 2021 .
  26. "Hoja de ruta de complementos para Firefox" . MDN . 19 de enero de 2021. Archivado del original el 21 de enero de 2021. Consultado el 10 de febrero de 2021 .
  27. "Firefox para empresas 91 - Notas de la versión | Ayuda de Firefox para empresas" . support.mozilla.org . Consultado el 13 de febrero de 2022 .
  28. "Firefox ESR 78.15.0, Ver todas las nuevas funciones, actualizaciones y correcciones" . Mozilla . Consultado el 3 de enero de 2022 .
  29. Clover, Juli (17 de septiembre de 2018). "Apple lanza Safari 12 para macOS Sierra y macOS High Sierra" . MacRumors .
  30. "Notas de la versión de Safari 14" . Documentación para desarrolladores de Apple .
  31. "¿Por qué ya no funcionan los complementos de Oracle Java, Microsoft Silverlight, Adobe Acrobat Reader y otros?" Complementos NPAPI
  32. "Notas de la versión 2.53.7 de SeaMonkey" . Consultado el 14 de marzo de 2021 .
  33. ^ "NPAPI 是重型武器,当别的方法无法到达你的目的时,才建议使用。" . NPAPI 插件.
  34. "Compatibilidad con todos los plugins NPAPI (Unity, Silverlight, Flash, Java, plugins de autenticación, etc.)" . Características de Basilisk.
  35. "La mayoría de los complementos de terceros diseñados para Mozilla/Netscape también funcionarán con K-Meleon" . Complementos de terceros.
  36. "Cargar todos los complementos NPAPI, Java, Silverlight, etc." K-Meleon Hybrid (Goanna sobre Pro).
  37. " Soporte completo y continuo para complementos NPAPI (Java, Silverlight, etc.) ". Pale Moon: Detalles técnicos
  38. "Pale Moon es compatible con los complementos NPAPI. A diferencia de Firefox, no dejaremos de ofrecer soporte para este tipo de complementos" . Hoja de ruta futura de Pale Moon.
  39. "Utilizamos la arquitectura de complementos NPAPI (igual que Mozilla), así que simplemente instale los complementos de forma normal y todo debería funcionar" . Preguntas frecuentes de Uzbl.
  40. "Descripción de las tecnologías ActiveX" . Soporte . Microsoft . 19 de enero de 2007.
  41. "ppapi" . Código de Google . Archivado del original el 2 de julio de 2010.
  42. "Primeros pasos: Antecedentes y conceptos básicos – Los proyectos Chromium" . chromium.org .
  43. "Conceptos - ppapi - Conceptos importantes para trabajar con PPAPI. - API de plugins Pepper – Google Project Hosting" . google.com .
  44. "Adobe y Google se asocian para Flash Player en Linux" . adobe.com . Archivado del original el 23 de febrero de 2012. Consultado el 7 de marzo de 2012 .
  45. Campbell, Chris (31 de agosto de 2016). "Noticias beta: Flash Player NPAPI para Linux" . Blog del equipo de Adobe AIR y Adobe Flash Player . Adobe Systems . Recuperado el 8 de septiembre de 2016 .
  46. Anthony Laforge (10 de agosto de 2020). "Cambios en el cronograma de soporte de aplicaciones de Chrome" . Blog de Chromium .
  • Documentación para el desarrollo de plugins archivada el 3 de agosto de 2012 en Wayback Machine del Centro de desarrolladores de Mozilla, incluyendo la API NPAPI.
  • Referencia de la API del plugin Gecko archivada el 3 de agosto de 2012 en Wayback Machine en el Centro de desarrolladores de Mozilla.
  • Un control ActiveX que aloja complementos : un reemplazo para plugin.ocx, que fue eliminado de Internet Explorer.
  • Libro sobre programación de complementos para Netscape, de Zan Oliphant.
  • Nixysa: Un marco de generación de código de conexión para complementos NPAPI. Licencia Apache 2.0.
  • Tutorial de NPAPI : Creación de un plugin para Firefox ( Parte dos , Parte tres , Parte cuatro )
  • Documentación de las extensiones de Opera 15+