我使用旧的Mozilla NPRuntime示例作为基础编写了一个小的NPAPI插件。我的问题是它在Firefox和Safari(在Windows上)上工作正常,但它无法与谷歌浏览器一起使用。
我可以在插件中看到插件:插件就好了,当我打开测试页面时,我看到Chrome启动了运行插件的新进程,插件进程在大约10秒内死机,没有任何错误对话框。在10秒内,进程处于活动状态,访问脚本化插件对象不起作用(使用Firefox或Safari时工作正常)。
任何可能导致Chrome在10秒后杀死插件进程的想法?必须是与初始化相关的东西,因为即使我不以任何方式访问插件,它也会杀死它。
答案 0 :(得分:15)
很难确定,但您可以使用--plugin-startup-dialog命令行参数让Chrome在加载插件时在同一进程中弹出警报。然后,您可以将调试器附加到该进程,并希望能够捕获错误。
您可以查看FireBreath进行比较,看看您是否可以发现初始化代码中的任何重大差异,因为FireBreath在Chrome中运行正常。不过,我建议附加一个调试器,然后逐步执行代码直到它崩溃。在每个入口点,NPP_New,NPP_Destroy和NPP_SetWindow上设置断点,看看会发生什么。
另一种选择是尝试从源代码构建Chromium(不是非常困难,但非常耗时)然后你可以获得一个完整的堆栈跟踪到它停止工作的地方。
祝你好运!答案 1 :(得分:5)
感谢Taxilian的提示,我能够调试初始化序列,并发现当Chrome调用插件的NP_Initialize()时,示例插件返回错误。示例插件进行了检查,以确保在插件的编译中使用的NPNetscapeFuncs结构定义至少与浏览器提供的相同。看来Chrome使用的结构版本19自然小于最新的Mozilla XUL Runner SDK的第22版,我从中获得了npapi.h和npruntime.h。