Плагин 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 (независимо от того, вызывается он или нет), приводит к поломке плагина.

Я пришел к такому выводу, сделав следующее.

  1. Создал новый проект с firebreath (версии 1.4 и 1.6)
  2. Добавьте заголовки gpgme.h в gmailGPGAPI.cpp и больше ничего не меняйте, кроме добавления необходимых ссылок к проекту.
  3. Создайте проект для создания dll (это создаст dll в порядке).
  4. Замените существующий ddl в моем проекте на dll из шага 2 и протестируйте его с помощью следующего фрагмента кода.

плагин = document.createElement('объект'); plugin.id = 'плагин';
plugin.type = 'application/x-gmailtest';
document.body.appendChild(плагин);
console.log("мой плагин вернул: "+ плагин .valid);
console.log("Мой плагин вернул: " + plugin.version);

  1. Это возвращает valid = true, и версия возвращает то, что я когда-либо устанавливал.
  2. Затем я изменил gmailGPGAPI.cpp, чтобы теперь он возвращал версию gpg, вызвав gpgme_check_version(NULL) в методе версии. Я использовал этот метод, потому что это, вероятно, самая простая возвращающая функция, которую я мог протестировать.
  3. Соберите плагин и скопируйте dll в расширение chrome, как в шагах 3-4. Плагин снова отлично работает, как и ожидалось.
  4. Загрузите плагин и попробуйте выполнить код на шаге 4, после чего он теперь просто возвращает undefined для любого свойства или метода, к которому я пытаюсь получить доступ в плагине. Никакие ошибки не выводятся на консоль или где-либо еще в хроме, за исключением ошибки, зарегистрированной в пиле.

Я понятия не имею, где искать или что попробовать, так как я не могу найти действенную ошибку, с которой можно было бы работать. Я также сократил тестовый код до такой степени, что это просто новый проект с изменением одной строки, чтобы упростить поиск проблемы.

Я должен отметить, что код в репозитории отлично строится в linux/OSX и правильно загружается в chrome, поэтому я знаю, что на каком-то уровне мой код действительно работает.


person RC1140    schedule 13.06.2012    source источник
comment
Никогда, никогда никогда не устанавливайте MIME-тип тега объекта до тех пор, пока вы не вставите его в DOM.   -  person taxilian    schedule 14.06.2012
comment
RC1140, я не уверен, знаете ли вы об этом или нет, но мой плагин webpg-npapi (github .com/kylehuff/webpg-npapi) разработан как вставной браузерный интерфейс для GnuPG — часть вашего кода основана на моем другом плагине — gpgauth-npapi — но он имеет более узкую область применения. для конкретной задачи. Я бы предложил использовать webpg-npapi в ваших расширениях, чтобы обеспечить единый интерфейс для GnuPG. Плагин GPL и работает на Windows, Linux и OSX. Исходный код моего собственного расширения webpg-chrome, найденный на github.com, можно использовать в качестве справочного материала для доступа к методам, предоставляемым webpg-npapi.   -  person kylehuff    schedule 07.07.2012
comment
Привет, Кайл. Я посмотрю на это еще раз, но не смог заставить ваш плагин легко строиться в Windows. Теперь, когда я это понял, я посмотрю, смогу ли я использовать ваш плагин в качестве альтернативы. Я использовал ваш код в прошлом в качестве ссылки, но проблема заключается в том, что хром загружает плагин, а не код в плагине.   -  person RC1140    schedule 10.07.2012


Ответы (1)


Два возможных пути:

  1. Возможно, у вас есть недоступная зависимость DLL, которая не позволяет плагину загружаться; если вы запустите на нем regsvr32 в состоянии, когда он не работает на хроме, он работает?
  2. Возможно, ваш плагин загружается, а затем падает. Запустите хром с помощью --plugin-startup-dialog, а затем, когда появится диалоговое окно с предупреждением о том, что подключаемый модуль будет загружен, присоединитесь к этому процессу и посмотрите, не произойдет ли сбой процесса. На этом этапе вы также можете установить точки останова, чтобы попытаться выяснить, как далеко он зайдет.

Дважды проверьте свои метаданные в PluginConfig.cmake; иногда необычные символы в некоторых полях могут вызывать подобные проблемы.

person taxilian    schedule 13.06.2012