2010-09-17 15 views
13

Estoy empezando a trabajar en una extensión de navegador y debido a la naturaleza de la extensión, necesito desarrollarla en C++. Actualmente estoy trabajando con Firefox, pero me gustaría que mi código sea portátil en todos los navegadores. En primer lugar, ¿hay una biblioteca o una interfaz (como NPAPI) que pueda usar para garantizar esto para las extensiones? ¿Cuáles son las cosas de las que debo preocuparme?Desarrollo de extensión de navegador cruzado en C++

No utilizo XPCOM y, en cambio, escribo la funcionalidad en C++ para que pueda compilar la biblioteca para cada plataforma y pueda agruparla con la extensión de cada navegador. Para Firefox, estoy usando XUL para desarrollar el contenedor JS para mi extensión y un archivo IDL genera la interfaz C++ para mí. ¿Puedo hacer algo mejor? Solo quiero asegurarme de que no voy por el camino equivocado.

EDITAR: También sugiera si hay un foro mejor para este tipo de pregunta.

+1

foro correcto. Buena pregunta. – sje397

+0

¡Pero no hay respuesta hasta el momento! – user220201

Respuesta

4

Mi experiencia: hace unos años, trabajé en un plugin multiplataforma, navegador cruzado NPAPI que usaba OpenGL para hacer renderizado de imágenes. He prestado algo de atención al espacio desde entonces, pero no es lo que hago hoy en día. He escrito extensiones que no son complementos para Firefox, pero no para Safari o Chrome.


Mucho depende de exactamente lo que usted quiere que su extensión a hacer, y qué tipo de interfaz de usuario que desea presentar. Los diferentes navegadores tienen diferentes ideas de lo que las extensiones pueden y no pueden hacer.

Si solo desea mostrar imágenes o videos en un formato personalizado, NPAPI es probablemente su mejor opción. NPAPI es fundamentalmente una capa delgada alrededor de las API de la plataforma nativa. Como tal, el código NPAPI multiplataforma tiene que lidiar con las peculiaridades de la plataforma individual, así como con los diferentes niveles de soporte para NPAPI de los navegadores. Google tiene un proyecto llamado Pepper para solucionar algunos de los problemas de NPAPI, pero Pepper aún no tiene soporte de ningún navegador además de Chrome.

El proyecto de Native Client de Google proporciona una alternativa a NPAPI para ejecutar código nativo, pero impone restricciones en el código nativo. Por ejemplo, pthreads están permitidos, pero el acceso a la red no lo es. Hay un subproyecto de NaCL llamado c_salt que parece abordar el tipo de integración de código nativo HTML/JS UI + que busca. Lamentablemente, todavía está en la fase de diseño y, por lo tanto, no es muy útil para escribir extensiones hoy.

Según tengo entendido, por ahora, una extensión de navegador cruzado que se integra con la interfaz de usuario del navegador y también se integra con el código nativo no es factible. Tanto Safari como Chrome restringen las extensiones mucho más que Firefox, y solo permiten extensiones escritas en JavaScript. No sé si es posible tener una extensión en Safari o Chrome interactuar con un complemento de navegador escrito en NPAPI. Supongo que es imposible o increíblemente doloroso.

En general, encontrará la vida mucho, mucho más fácil si restringe cuidadosamente a qué navegadores y plataformas apuntar. Exactamente qué navegadores y plataformas elegir es algo que solo usted puede decidir.

+0

Entonces, ¿no hay un marco FireBreath equivalente para escribir extensiones del navegador? –

+1

Hablando de FireBreath, acabo de encontrar una excelente publicación en el sitio del desarrollador, [Complementos del navegador frente a extensiones: la diferencia] (http://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference /). Es cierto que he estado confundido acerca de la diferencia entre los dos. (¡Es una lástima, porque lo que en realidad me piden que implemente es una extensión!) –

3

No muchos lo saben, pero sí, puede escribir complementos de navegador cruzado utilizando Qt. :-)

Puede usar el QtBrowserPlugin solo para eso.

La solución QtBrowserPlugin hace fácil escribir plugins del navegador que puede ser utilizados en Mozilla Firefox, Safari, Opera, Google Chrome, QtWebKit y cualquier otro navegador web compatible con la "Netscape Plugin API" , NPAPI.

QtBrowserPlugin es parte de los paquetes Qt Solutions.

Cuestiones relacionadas