Плагин Firebreath на Windows не загружается в Chrome
Я занят преобразованием существующего плагина Firebreath, чтобы использовать gpgme вместо того, чтобы звонить через ОС и двоичный файл gpg.
Мне удалось получить код для компиляции в Windows, используя VS 2010 в системе x32, но после загрузки плагина в Chrome я вообще не могу получить доступ к коду npapi. Даже простые вызовы версии не удается.
При загрузке плагина я не вижу видимых ошибок, но при использовании средства просмотра журнала sawbuck для chrome я получаю сообщения об ошибках ниже.
.\renderer\webplugin_delegate_proxy.cc 347 PluginMsg_Init returned false
..\plugins\npapi\webplugin_impl.cc 271 Couldn't initialize plug-in
Я пытался использовать мой код с Firebreath 1.4 и 1.6, и ни одна из версий не работает. После некоторой простой отладки кажется, что использование любого кода, предоставленного gpgme (независимо от того, вызывается он или нет), приводит к сбою плагина.
Я пришел к такому выводу, сделав следующее.
- Создан новый проект с Firebreath (версии 1.4 и 1.6)
- Добавьте заголовки gpgme.h в gmailGPGAPI.cpp и ничего не измените, кроме добавления необходимых ссылочных путей к проекту.
- Создайте проект для создания dll (это создает dll нормально).
- Замените существующий ddl в моем проекте на dll в шаге 2 и протестируйте его следующим фрагментом кода
plugin = document.createElement('object'); plugin.id = 'плагин';
plugin.type = 'application / x-gmailtest';
document.body.appendChild (плагин);
console.log ("мой плагин вернул:" + plugin.valid);
console.log ("мой плагин вернул: " + plugin.version);
- Это возвращает valid = true, и версия возвращает то, что я когда-либо устанавливал.
- Затем я изменил gmailGPGAPI.cpp, чтобы теперь возвращать версию gpg, вызывая gpgme_check_version(NULL) в методе версии. Я использовал этот метод, потому что это, вероятно, самая простая возвращаемая функция, с которой я мог протестировать.
- Создайте плагин и скопируйте расширение dll в chrome, как в шаге 3-4. Плагин снова работает нормально, как и ожидалось.
- Загрузите плагин и попробуйте выполнить код на шаге 4, и теперь он просто возвращает неопределенное значение для любого свойства или метода, к которому я пытаюсь получить доступ в плагине. Ошибки не выводятся на консоль или где-либо еще в chrome, за исключением ошибки, записанной в sawbuck.
Я понятия не имею, где искать или что попробовать, так как мне кажется, что я не могу получить действенную ошибку, с которой нужно работать. Я также сократил тестовый код до такой степени, что это просто новый проект с изменением в одну строку, чтобы упростить поиск проблемы.
Я должен отметить, что код в репозитории прекрасно собирается в linux/OSX и корректно загружается в chrome, поэтому я знаю, что на каком-то уровне мой код работает.
1 ответ
Два возможных пути:
- У вас может быть зависимость DLL, которая недоступна, что не позволяет плагину загружаться; если вы запускаете regsvr32 на нем в состоянии, когда он не работает на Chrome, он работает?
- Возможно, ваш плагин загружается, а затем падает. Запустите Chrome с помощью --plugin-startup-dialog, а затем, когда появится диалоговое окно, предупреждающее вас о том, что подключаемый модуль собирается быть загруженным, присоединится к этому процессу и посмотрите, не завершится ли процесс. На этом этапе вы также можете установить точки останова, чтобы попытаться выяснить, как далеко он продвинется.
Дважды проверьте ваши метаданные в PluginConfig.cmake; иногда необычные символы в некоторых полях могут вызвать такие проблемы.