2012-06-13 3 views
0

Я занят преобразованием существующего плагина firebreath here, чтобы использовать gpgme вместо вызовов через ОС и двоичный файл gpg.Плагин Firebreath на окнах не загружается в chrome

Мне удалось получить код для компиляции в Windows с использованием VS 2010 в системе x32, но после загрузки плагина на хром я вообще не могу получить доступ к коду npapi. Даже простые вызовы версий терпят неудачу.

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

.\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 fine).
  4. Заменить существующий DDL в моем проекте с DLL в шаге 2 и протестировать его со следующим фрагментом кода

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

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

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

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

+0

Никогда не * никогда * не устанавливайте mimetype на теге объекта, пока вы не вводите его в DOM. – taxilian

+0

RC1140, я не уверен, знаете ли вы об этом или нет, но мой плагин webpg-npapi (https://github.com/kylehuff/webpg-npapi/) предназначен для использования в браузере с интерфейсом GnuPG - часть вашего кода основана на моем другом плагине - gpgauth-npapi, но у него более узкая область для конкретной задачи. Я бы предложил использовать webpg-npapi в ваших расширениях, чтобы обеспечить единый интерфейс для GnuPG. Плагин GPL и работает в Windows, Linux и OSX. Источник моего собственного расширения webpg-chrome, найденный на github.com, может использоваться как ссылка для доступа к методам, предоставляемым webpg-npapi. – kylehuff

+0

Привет, Кайл. Я еще раз посмотрю на него, но не смог заставить ваш плагин легко создавать окна. Теперь, когда я понял это, я увижу, могу ли я использовать ваш плагин в качестве альтернативы. Я использовал ваш код в прошлом как ссылку, но проблема atm заставляет хром загружать плагин, а не код в плагине. – RC1140

ответ

0

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

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

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

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