2009-12-26 2 views
5

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

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

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

ответ

15

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

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

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

Удачи вам!

+2

Кроме того, если он никогда не вводит код плагина, и вы находитесь на окнах, профилирующий хром с * depends.exe * может давать ценные советы. –

+1

Использование диалога -plugin-startup позволило мне отладить последовательность инициализации и найти проблему. Спасибо! – eburger

+0

Не могли бы вы рассказать нам больше, в чем проблема, если это хром-специфический? – Gui13

5

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

Смежные вопросы