2009-12-26 9 views
5

Escribí un pequeño complemento NPAPI utilizando un antiguo ejemplo de Mozilla NPRuntime como base. Mi problema es que funciona bien en Firefox y Safari (en Windows), pero no funciona con Google Chrome.Un complemento NPAPI no funciona en Google Chrome

Puedo ver el complemento en: complementos bien y veo a Chrome lanzando un nuevo proceso para ejecutar el complemento cuando abro la página de prueba, el proceso de complemento muere en ~ 10 segundos sin ningún cuadro de diálogo de error. Durante los 10 segundos que el proceso está activo, acceder al objeto de complemento programable no funciona (lo cual funciona bien cuando se usa Firefox o Safari).

¿Alguna idea de lo que podría causar que Chrome mate el proceso del complemento después de 10 segundos? Debe haber algo relacionado con la inicialización, porque lo elimina incluso si no accedo al complemento de ninguna manera.

Respuesta

15

Es difícil decirlo con certeza, pero puede usar el parámetro de línea de comando --plugin-startup-dialog para que Chrome muestre una alerta cuando carga un complemento, en el mismo proceso. A continuación, puede conectar el depurador a ese proceso y, con suerte, detectar el error.

Puede consultar FireBreath para comparar para ver si puede detectar cualquier diferencia importante en el código de inicialización, ya que FireBreath funciona bien en Chrome. Sin embargo, recomendaría adjuntar un depurador y recorrer el código hasta que falle. Establezca puntos de interrupción en cada punto de entrada, en NPP_New, NPP_Destroy y NPP_SetWindow, y vea qué sucede.

Otra opción sería intentar crear Chromium desde el origen (no es ridículamente difícil, pero consume mucho tiempo) y luego podrías obtener un seguimiento completo de la pila donde deja de funcionar.

¡Buena suerte!

+2

Además, si nunca ingresa el código del complemento y está en Windows, perfilar Chrome con * depends.exe * puede brindar valiosos consejos. –

+1

El uso del diálogo -plugin-startup-me permitió depurar la secuencia de inicialización y encontrar el problema. ¡Gracias! – eburger

+0

¿Podría decirnos más cuál era el problema, si es específico de Chrome? – Gui13

5

Gracias a la sugerencia de Taxilian pude depurar la secuencia de inicialización y descubrí que el plugin de ejemplo estaba devolviendo un error cuando Chrome llamaba al plugin NP_Initialize(). El plugin de ejemplo tenía una verificación para asegurarse de que la definición de estructura de NPNetscapeFuncs utilizada en la compilación del plugin fuera al menos del mismo tamaño que la que ofrece el navegador. Parece que Chrome usa la versión 19 de la estructura, que es naturalmente más pequeña que la versión 22 del último Mozilla XUL Runner SDK del que obtuve npapi.h y npruntime.h.

Cuestiones relacionadas