5

我使用旧的 Mozilla NPRuntime 示例作为基础编写了一个小型 NPAPI 插件。我的问题是它在 Firefox 和 Safari(在 Windows 上)上运行良好,但无法在 Google Chrome 上运行。

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

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

4

2 回答 2

15

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

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

另一种选择是尝试从源代码构建 Chromium(难度不大,但耗时),然后您可以获得完整的堆栈跟踪到它停止工作的位置。

祝你好运!

于 2009-12-26T06:26:53.177 回答
5

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

于 2009-12-26T13:23:57.793 回答