Chrome扩展程序中的公共NPAPI插件无法加载

时间:2012-01-04 18:08:40

标签: google-chrome plugins npapi

我有一个NPAPI插件,并入Chrome扩展程序,并在清单文件中定义为公开。当插件的mime类型的对象标签插入扩展的后台页面时,插件加载正常。使用chrome.tabs.executeScript将相同的对象标记插入任意网页时,无法加载。如果插件本身被放入Plugins文件夹(并加载到浏览器中),那么具有适当mime类型的对象将成功插入到任意网页中。

问题在于,当插件部署在扩展中并标记为公共时,插件无法正确加载到任意网页中(据我所知,它应该可用于任何页面)。 / p>

2 个答案:

答案 0 :(得分:2)

您应该在扩展程序的清单中使用mark the plugin"public": true。该插件应显示在about:plugins

如果插件出现,请确认about:plugins中的MIME类型和文件扩展名与注入页面的embed元素的类型相匹配。还要检查其他插件是否具有相同的MIME类型。如果前面列出的插件具有相同的MIME类型,将加载插件。

如果您的插件没有显示,或者它显示但不起作用,那么您需要做更多的侦探工作:

您可以使用--debug-plugin-loading标记启动Chrome,以便从插件基础结构中获取额外的日志记录。其中一些消息如下所示:

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

尽管包含ERROR一词,但这些消息并非错误。 ERROR只是日志级别。使用Chromium Code Search和日志中提到的文件(例如plugin_list.cc)来读取上下文中的日志消息。 Chrome使用multi-process architecture.因此请记住,输出可能会散布来自不同进程的日志消息。

如果您有插件的来源,则将日志语句放在插件代码中。例如,在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

将显示在日志中。这些日志语句可以为您提供有关插件加载失败之前的插件的更多线索。

这需要一些努力,但你可以build Chromium from scratch并使用--plugin-launcher命令行选项来获取插件加载器的源代码级调试。

答案 1 :(得分:1)

根据要求在我的评论中发布答案=]

如果您使用公共插件安装扩展程序(并且所有内容都已正确安装),那么它将显示在about:plugins中。因此,您的扩展/插件安装有问题。不幸的是,这就是我所知道的。

about:评论中提到的插件将显示所有公共插件,无论是作为扩展中的公共插件安装还是仅作为NPAPI插件安装。