Не удается загрузить публичный плагин NPAPI из расширения Chrome - PullRequest
1 голос
/ 04 января 2012

У меня есть плагин NPAPI, встроенный в расширение Chrome и определенный в файле манифеста как открытый. Когда тег объекта с типом mime плагина вставляется на фоновую страницу расширения, плагин загружается нормально. Когда тот же тег объекта вставляется в произвольную веб-страницу с использованием chrome.tabs.executeScript, он не загружается. Если сам плагин помещается в папку плагинов (и загружается в браузер), то объекты с соответствующим типом пантомимы успешно вставляются в произвольные веб-страницы.

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

Ответы [ 2 ]

2 голосов
/ 20 августа 2012

Вы должны использовать , пометьте плагин с "public": true в манифесте ваших расширений. Плагин должен отображаться в about:plugins.

Если подключаемый модуль обнаруживается, убедитесь, что тип MIME и расширения файлов в about: plugins соответствуют типу вставляемого элемента на страницу. Также проверьте, имеют ли другие плагины такой же тип MIME. Если плагин, который указан ранее, имеет такой же тип MIME, будет загружен , что плагин .

Если ваш плагин не появляется, или он появляется, но не работает, у вас есть более детективная работа:

Вы можете запустить Chrome с флагом --debug-plugin-loading, чтобы получить дополнительную запись в инфраструктуру плагина. Некоторые из этих сообщений выглядят так:

[24634:-1392008512:1466799063452984:ERROR:plugin_list.cc(358)] Loading plugin /Library/Internet Plug-Ins/Flash Player.plugin

Несмотря на то, что они содержат слово ERROR, эти сообщения не являются ошибками. ОШИБКА - это просто уровень журнала. Используйте Поиск кода Chromium и файлы, упомянутые в журнале (например, plugin_list.cc), чтобы прочитать сообщения журнала в контексте. Chrome использует многопроцессную архитектуру . Помните, что выходные данные могут чередовать сообщения журнала от разных процессов.

Если у вас есть источник вашего плагина, вы помещаете логирующие операторы в код вашего плагина. Например, в OS X вы могли бы написать:

NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs) {
  NSLog(@"FOO NP_GetEntryPoints");
  …

, а затем

2012-08-20 11:22:56.799 Google Chrome Helper EH[23544:b03] FOO NP_GetEntryPoints

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

Это потребует некоторых усилий, но вы можете собрать Chromium с нуля и использовать опцию командной строки --plugin-launcher, чтобы получить отладчик загрузчика плагинов на уровне исходного кода.

1 голос
/ 12 февраля 2012

Публикация ответа с моими комментариями в соответствии с запросом =]

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

about: плагины, как отмечено в комментариях, будут отображать все общедоступные плагины, независимо от того, установлены ли они как общедоступные плагины в расширении или только как плагины NPAPI.

...