到目前为止,我一直试图在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开关一样吗?
非常感谢任何帮助。
答案 0 :(得分:1)
我进一步调查了这一点。问题是npsimple的Localized.r只列出ID 128条目中的MIME类型,它应该是MIME类型/文件扩展名对。 WebKit和Gecko显然容忍最后一个没有文件扩展名条目的条目,但Chromium没有。
有两种方法可以让您的插件在Chromium for Mac中运行:
最好的方法是使用新的Info.plist样式来声明MIME类型,如Apple's plugin docs的“注册您的插件”部分所述。 Firefox 3.5+,Safari和Chrome至少支持此功能;您可以将资源留作旧浏览器的后备。
如果您只想使用该资源,可以通过将Localized.r中的MIME条目行更改为:
,为MIME声明添加空文件扩展名。“application / x-vnd-aplix-foo”,“”
请注意,在某些浏览器(包括Chromium)可能会在可预见的将来放弃对旧的基于资源的方法的支持,所以我强烈建议选择1。
(可以说它是Chromium中的一个错误,它不像其他浏览器那样优雅地处理它,但是因为这个方法已被弃用,而且对于我所知道的任何实际部署的插件来说它不是问题,它是不太可能被改变。)
答案 1 :(得分:0)
我刚检查了我的插件,它也适用于你提到的开发版。 所以原则上这个开发版Google Chrome支持第三方NPAPI插件。 (过去我们看起来似乎只支持Flash和Quicktime插件的开发版。)
要检查的一些事项:
答案 2 :(得分:0)
有几个非常具体的异常(你想要处理哪些MIME类型?)应该加载任何有效的NPAPI插件。最好的办法是尽可能详细地file a bug,以便我可以调查(我在Mac上使用谷歌浏览器的插件支持)。