0

我正忙于通过现有的 firebreath 插件进行转换以使用gpgme而不是通过操作系统和 gpg 二进制文件进行调用。

我已经设法在 x32 系统上使用 VS 2010 在 Windows 中编译代码,但是在将插件加载到 chrome 后,我根本无法访问 npapi 代码。即使是简单的版本调用也会失败。

加载插件时,我没有看到明显的错误,但是当使用 chrome 的 sawbuck 日志查看器时,我收到下面的错误消息。

.\renderer\webplugin_delegate_proxy.cc  347 PluginMsg_Init returned false
..\plugins\npapi\webplugin_impl.cc  271 Couldn't initialize plug-in

我尝试将我的代码与 firebreath 1.4 和 1.6 一起使用,但两个版本都不起作用。经过一些简单的调试后,似乎使用 gpgme 提供的任何代码(无论是否调用)都会导致插件中断。

我通过以下操作得出了这个结论。

  1. 使用 firebreath 创建了一个新项目(版本 1.4 和 1.6)
  2. 将 gpgme.h 标头添加到 gmailGPGAPI.cpp 中,除了将所需的引用路径添加到项目中之外,没有进行任何其他更改。
  3. 构建项目以创建 dll(这会很好地生成 dll)。
  4. 将我项目中现有的ddl替换为第2步中的dll,并用下面这段代码进行测试

plugin = document.createElement('object'); plugin.id = '插件';
plugin.type = '应用程序/x-gmailtest';
document.body.appendChild(插件);
console.log("我的插件返回:"+ plugin.valid);
console.log("我的插件返回:" + plugin.version);

  1. 这会返回 valid = true 并且版本会返回我设置的内容。
  2. 然后我修改了 gmailGPGAPI.cpp,现在通过在 version 方法中调用 gpgme_check_version(NULL) 返回 gpg 版本。我使用该方法是因为它可能是我可以测试的最简单的返回函数。
  3. 构建插件并将 dll 复制到 chrome 扩展,如步骤 3-4 所示。该插件按预期再次构建良好。
  4. 加载插件并尝试执行步骤 4 中的代码,此时它现在只为我尝试在插件上访问的任何属性或方法返回未定义。除了记录到 sawbuck 的错误外,不会在控制台或 chrome 中的任何其他地方打印任何错误。

我不知道去哪里看或尝试什么,因为我似乎无法解决可操作的错误。我还通过测试代码减少了它只是一个带有一行更改的新项目,以便更容易找到问题。

我应该注意 repo 中的代码在 linux/OSX 中构建良好并正确加载到 chrome 中,所以我知道在某种程度上我的代码确实有效。

4

1 回答 1

0

两种可能的路径:

  1. 您可能有一个不可用的 DLL 依赖项,导致插件无法加载;如果你在它不能在 chrome 上运行的状态下运行 regsvr32,它可以工作吗?
  2. 您的插件可能正在加载然后崩溃。使用 --plugin-startup-dialog 启动 chrome,然后当它弹出一个对话框,警告您即将加载插件时附加到该进程并查看该进程是否崩溃。此时,您还可以设置断点来尝试弄清楚它走了多远。

仔细检查 PluginConfig.cmake 中的元数据;有时某些字段中的异常字符会导致此类问题。

于 2012-06-13T21:44:52.173 回答