Плагин NPAPI не работает в Google Chrome - PullRequest
5 голосов
/ 26 декабря 2009

Я написал небольшой плагин NPAPI, используя старый пример Mozilla NPRuntime в качестве основы. Моя проблема в том, что он отлично работает в Firefox и Safari (в Windows), но не работает с Google Chrome.

Я вижу плагин примерно так: плагины просто отлично, и я вижу, что Chrome запускает новый процесс запуска плагина, когда я открываю свою тестовую страницу, процесс плагина умирает через ~ 10 секунд без какого-либо сообщения об ошибке. В течение 10 секунд процесс активен, доступ к объекту подключаемого модуля с поддержкой сценариев не работает (что прекрасно работает при использовании Firefox или Safari).

Есть идеи, что может привести к тому, что Chrome прекратит процесс плагинов через 10 секунд? Должно быть что-то связанное с инициализацией, потому что это убивает, даже если я не получаю доступ к плагину.

Ответы [ 2 ]

15 голосов
/ 26 декабря 2009

Трудно сказать наверняка, но вы можете использовать параметр командной строки --plugin-startup-dialog, чтобы Chrome отображал предупреждение при загрузке плагина в том же процессе. Затем вы можете присоединить отладчик к этому процессу и, надеюсь, перехватить ошибку.

Вы можете посмотреть на FireBreath , чтобы увидеть, можете ли вы заметить какие-либо существенные различия в коде инициализации, поскольку FireBreath прекрасно работает в Chrome. Однако я бы порекомендовал подключить отладчик и проходить по коду до его сбоя. Установите точки останова в каждой точке входа, в NPP_New, NPP_Destroy и NPP_SetWindow, и посмотрите, что произойдет.

Другой вариант - попытаться собрать Chromium из исходного кода (не до смешного сложно, но отнимает много времени), и тогда вы сможете получить полную трассировку стека туда, где он перестает работать.

Удачи!

5 голосов
/ 26 декабря 2009

Благодаря подсказке Taxilian я смог отладить последовательность инициализации и обнаружил, что пример плагина возвращал ошибку, когда Chrome вызывал NP_Initialize () плагина. В примере плагина была проверка, чтобы убедиться, что определение структуры NPNetscapeFuncs, используемое в дополнении к плагину, было по крайней мере того же размера, что и предложенное браузером. Похоже, что Chrome использует версию 19 структуры, которая, естественно, меньше, чем версия 22 последнего Mozilla XUL Runner SDK, из которого я получал npapi.h и npruntime.h.

...