【问题标题】:A NPAPI plugin doesn't work in Google ChromeNPAPI 插件在 Google Chrome 中不起作用
【发布时间】:2009-12-26 02:21:22
【问题描述】:

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

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

有什么想法会导致 Chrome 在 10 秒后终止插件进程?一定是初始化相关的东西,因为即使我不以任何方式访问插件,它也会杀死它。

【问题讨论】:

    标签: google-chrome npapi


    【解决方案1】:

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

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

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

    祝你好运!

    【讨论】:

    • 此外,如果它没有输入插件代码并且您在 Windows 上,使用 depends.exe 分析 chrome 可以提供有价值的提示。
    • 使用 -plugin-startup-dialog 允许我调试初始化序列并找到问题。谢谢!
    • 你能告诉我们更多问题是什么,如果它是特定于 chrome 的吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多