1

到目前为止,我一直试图让 Mac OS X 上的 Google Chrome (6.0.401.1 dev) 加载一个 NPAPI 插件,但没有成功。我一直在处理这里的 npsimple 示例:http://git.webvm.net/ ? p=npsimple 。

在 Mac 上使用 gcc 和在 Windows 上使用 VC++ 2008 我设法让它在 Mac OS X 上的 Safari 和 Firefox 以及 Windows 上的 Firefox 和 Google Chrome 上运行,但不能在 Mac OS X 上的 Google Chrome 上运行。

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

此外,在加载带有插件嵌入标签的页面时,谷歌浏览器似乎甚至没有对插件进行 dyld 加载,也没有调用任何函数(甚至没有调用 NP_GetEntryPoints)。谷歌浏览器也不会输出任何错误信息,它只是不加载插件。由于 Google Chrome 使用不同的进程,我不确定我是否使用 gdb 捕获了所有内容,但我也尝试了所有开关,例如--no-sandbox,--single-process--plugin-startup-dialog(顺便说一下,这在 Mac OS X 上似乎根本不起作用)。我还确定了二进制匹配的体系结构(即 Google Chrome 的 32 位)。

以前有没有人遇到过类似的问题?我在这里有什么遗漏吗,比如编译时的 gcc 开关之类的?

任何帮助将不胜感激。

4

3 回答 3

1

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

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

  1. 最好的方法是使用声明 MIME 类型的新 Info.plist 样式,在Apple 插件文档的“注册您的插件”部分中进行了描述。至少 Firefox 3.5+、Safari 和 Chrome 支持此功能;您可以将资源保留为旧浏览器的后备。

  2. 如果您只想使用该资源,您可以通过将 Localized.r 中的 MIME 条目行更改为:向 MIME 声明添加一个空文件扩展名:

    “应用程序/x-vnd-aplix-foo”,“”

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

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

于 2010-05-27T17:17:18.130 回答
0

除了几个非常具体的例外(您要处理哪些 MIME 类型?)任何有效的 NPAPI 插件都应该加载。最好的办法是尽可能详细地提交一个错误,以便我可以进行调查(我致力于在 Mac 上为 Google Chrome 提供插件支持)。

于 2010-05-18T18:05:42.093 回答
0

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

需要检查的一些事项:

  • 当您在浏览器的地址字段中键入“about:plugins”时,您的插件是否包含在您获得的已安装插件列表中?
  • 您是否检查了控制台输出(运行 console.app)?
    有时您会在其中找到有价值的信息,例如当加载 dylib 失败时......
  • 可能是 Google Chrome 期望的插件包的 Info.plist 中缺少某些内容。
于 2010-05-17T12:40:53.853 回答