NPAPI插件在Google Chrome中不起作用

ebu*_*ger 5 google-chrome npapi

我使用旧的Mozilla NPRuntime示例作为基础编写了一个小的NPAPI插件.我的问题是它在Firefox和Safari(在Windows上)上工作正常,但它无法与谷歌浏览器一起使用.

我可以在插件中看到插件:插件就好了,当我打开测试页面时,我看到Chrome启动了运行插件的新进程,插件进程在大约10秒内死机,没有任何错误对话框.在10秒内,进程处于活动状态,访问脚本化插件对象不起作用(使用Firefox或Safari时工作正常).

任何可能导致Chrome在10秒后杀死插件进程的想法?必须是初始化相关的东西,因为即使我不以任何方式访问插件它也会杀死它.

tax*_*ian 15

很难确定,但您可以使用--plugin-startup-dialog命令行参数让Chrome在加载插件时在同一进程中弹出警报.然后,您可以将调试器附加到该进程,并希望捕获错误.

您可以查看FireBreath进行比较,看看是否可以发现初始化代码中的任何重大差异,因为FireBreath在Chrome中运行正常.不过,我建议附加一个调试器,然后逐步执行代码直到它崩溃.在每个入口点,NPP_New,NPP_Destroy和NPP_SetWindow上设置断点,看看会发生什么.

另一个选择是尝试从源代码构建Chromium(不是非常困难,但非常耗时)然后你可以获得一个完整的堆栈跟踪到它停止工作的地方.

祝好运!

  • 此外,如果它没有输入插件代码并且您在Windows上,使用*depends.exe*分析chrome可以提供有价值的提示. (2认同)

ebu*_*ger 5

感谢Taxilian的提示,我能够调试初始化序列,发现当Chrome调用插件的NP_Initialize()时,示例插件返回错误.示例插件进行了检查,以确保在插件的编译中使用的NPNetscapeFuncs结构定义至少与浏览器提供的相同.看来Chrome使用的结构版本19自然小于最新的Mozilla XUL Runner SDK的22版,我从中获得了npapi.h和npruntime.h.