Я занят преобразованием с помощью существующего плагина 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 и протестируйте его с помощью следующего фрагмента кода.
плагин = document.createElement('объект'); plugin.id = 'плагин';
plugin.type = 'application/x-gmailtest';
document.body.appendChild(плагин);
console.log("мой плагин вернул: "+ плагин .valid);
console.log("Мой плагин вернул: " + plugin.version);
- Это возвращает valid = true, и версия возвращает то, что я когда-либо устанавливал.
- Затем я изменил gmailGPGAPI.cpp, чтобы теперь он возвращал версию gpg, вызвав gpgme_check_version(NULL) в методе версии. Я использовал этот метод, потому что это, вероятно, самая простая возвращающая функция, которую я мог протестировать.
- Соберите плагин и скопируйте dll в расширение chrome, как в шагах 3-4. Плагин снова отлично работает, как и ожидалось.
- Загрузите плагин и попробуйте выполнить код на шаге 4, после чего он теперь просто возвращает undefined для любого свойства или метода, к которому я пытаюсь получить доступ в плагине. Никакие ошибки не выводятся на консоль или где-либо еще в хроме, за исключением ошибки, зарегистрированной в пиле.
Я понятия не имею, где искать или что попробовать, так как я не могу найти действенную ошибку, с которой можно было бы работать. Я также сократил тестовый код до такой степени, что это просто новый проект с изменением одной строки, чтобы упростить поиск проблемы.
Я должен отметить, что код в репозитории отлично строится в linux/OSX и правильно загружается в chrome, поэтому я знаю, что на каком-то уровне мой код действительно работает.