【问题标题】:Fail to load NPAPI plugin in Google Chrome on Mac OS X无法在 Mac OS X 上的 Google Chrome 中加载 NPAPI 插件
【发布时间】:2010-05-17 02:07:20
【问题描述】:

到目前为止,我一直在尝试让 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-卸载)插件,但实际上并未在插件中查找任何符号或调用任何职能。不过,它似乎对每个插件都这样做。

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

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

任何帮助将不胜感激。

【问题讨论】:

  • --单进程对于 Mac 上的插件调试不是一个好主意; NPAPI 插件在 Mac Chrome 的单进程模式下并不能真正工作。 --plugin-startup-dialog 不显示对话框,但会将 PID 记录到控制台并暂停插件。

标签: macos google-chrome plugins npapi


【解决方案1】:

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

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

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

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

    来为 MIME 声明添加一个空文件扩展名:

    "应用程序/x-vnd-aplix-foo", ""

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

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

【讨论】:

  • 抱歉耽搁了。我刚刚尝试了您的第一个建议,实际上解决了问题。非常感谢!
【解决方案2】:

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

需要检查的一些事项:

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

【讨论】:

  • 感谢您的回复。该插件显示在“关于:插件”页面中。我还检查了控制台,它包含来自沙盒的大量消息,主要是“拒绝 mach-lookup”和“拒绝文件读取数据”,但似乎与插件无关。此外,如果我使用“--no-sandbox”运行 Google Chrome,我根本不会从 Chrome 中收到任何日志消息,也不会出现错误。我还重新检查了 Info.plist,它适用于 Safari 和 Firefox,所以我不确定 Chrome 在 Info.plist 中还有什么期望。
【解决方案3】:

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

【讨论】:

  • 感谢您的回复。我目前仍在使用原始示例代码的 MIME 类型,即“application/x-vnd-aplix-foo”。我很快会再试一次,如果它仍然不起作用,我会按照你的建议提交一个错误。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多