无法在Mac OS X上的Google Chrome中加载NPAPI插件

时间:2010-05-17 02:07:21

标签: macos google-chrome plugins npapi

到目前为止,我一直试图在Mac OS X上安装Google Chrome(6.0.401.1 dev)来加载NPAPI插件。我一直在解决这里的简单示例:http://git.webvm.net/?p=npsimple

在Mac上使用gcc,在Windows上使用VC ++ 2008,我设法在Mac OS X上运行Safari和Firefox,在Windows上运行Firefox和谷歌浏览器,但在Mac OS X上不在谷歌浏览器上运行。

当尝试在Mac OS X上调试Google Chrome时,似乎Google Chrome在启动时会暂时加载(并立即dyld-unloading)插件,但实际上没有在插件中查找任何符号或调用任何符号功能。不过,似乎每个插件都在这样做。

此外,在使用插件的embed-tag加载页面时,Google Chrome似乎甚至没有加载插件,也没有调用任何函数(甚至不是NP_GetEntryPoints)。谷歌浏览器也不会输出任何错误消息,它只是不加载插件。由于Google Chrome使用了不同的流程,我不确定是否抓住了gdb的所有内容,但我也尝试了--no-sandbox--single-process--plugin-startup-dialog之类的所有交换机(顺便说一句似乎没有在Mac OS X上完成所有工作)。我还确保了二进制文件的架构匹配(即谷歌浏览器的32位)。

以前是否有人遇到过类似的问题?这里有什么我想念的,就像编译时的gcc开关一样吗?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我进一步调查了这一点。问题是npsimple的Localized.r只列出ID 128条目中的MIME类型,它应该是MIME类型/文件扩展名对。 WebKit和Gecko显然容忍最后一个没有文件扩展名条目的条目,但Chromium没有。

有两种方法可以让您的插件在Chromium for Mac中运行:

  1. 最好的方法是使用新的Info.plist样式来声明MIME类型,如Apple's plugin docs的“注册您的插件”部分所述。 Firefox 3.5+,Safari和Chrome至少支持此功能;您可以将资源留作旧浏览器的后备。

  2. 如果您只想使用该资源,可以通过将Localized.r中的MIME条目行更改为:

    ,为MIME声明添加空文件扩展名。

    “application / x-vnd-aplix-foo”,“”

  3. 请注意,在某些浏览器(包括Chromium)可能会在可预见的将来放弃对旧的基于资源的方法的支持,所以我强烈建议选择1。

    (可以说它是Chromium中的一个错误,它不像其他浏览器那样优雅地处理它,但是因为这个方法已被弃用,而且对于我所知道的任何实际部署的插件来说它不是问题,它是不太可能被改变。)

答案 1 :(得分:0)

我刚检查了我的插件,它也适用于你提到的开发版。 所以原则上这个开发版Google Chrome支持第三方NPAPI插件。 (过去我们看起来似乎只支持Flash和Quicktime插件的开发版。)

要检查的一些事项:

  • 当您在浏览器的地址栏中输入“about:plugins”时,您的插件是否包含在已安装的插件列表中?
  • 您是否检查了控制台输出(运行console.app)?
    有时您会在那里找到有价值的信息,例如加载dylib失败时......
  • 可能是Google Chrome预期的插件包的Info.plist中缺少某些内容。

答案 2 :(得分:0)

有几个非常具体的异常(你想要处理哪些MIME类型?)应该加载任何有效的NPAPI插件。最好的办法是尽可能详细地file a bug,以便我可以调查(我在Mac上使用谷歌浏览器的插件支持)。