1

我已经基于 mozilla npruntime 项目在 MS 中成功编译和创建了 npapi dll。参考来自:https ://developer.mozilla.org/en-US/docs/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio 。启动 Mozilla 并打开 about:plugins 显示插件。但是当我打开“test.html”时,插件不会出现。

我通过制作一个单独的测试应用程序测试了 dll,我可以通过 NP_INIT l_pInit= (NP_INIT)GetProcAddress(hModule, "NP_Initialize"); 访问入口点函数。我可以进入我的插件 dll 功能。

但是对于Mozilla,它不起作用。请建议。

4

3 回答 3

0

谢谢家伙。最后,我能够在浏览器中加载和访问我的插件的功能。以下是调查结果:- 1. 即使我的插件在资源文件中的 MIME 类型是“application/mozilla-npruntime-scriptable-plugin”。但我需要通过'application/x-npruntime-scriptable-plugin'从javascript嵌入元素访问它。在这一步之后,调试器开始打破我插件的断点。2. NPPluginFuncs 和 NPNetscapeFuncs 的大小检查失败,可能是因为我的 firefox 中实现的 NPAPI 版本不同。最后我得到了启动,感谢大家的支持。

于 2013-06-04T05:48:52.187 回答
0

听起来你的插件初始化很可能有问题;你可以尝试使用FireBreath来创建一个 npapi 插件,因为它的工作量会少很多,而且在 IE 上也能工作。如果您不喜欢这个想法,您可以查看其他 npapi 插件(包括 FireBreath)以确保您做的事情正确。将日志记录(您喜欢的任何类型)添加到主要入口点并查看它在哪个点失败。

另一个技巧是转到 about:config 并找到插件 ipc 设置并禁用它们;然后您可以附加到主 firefox 进程,如果它们被调用,它应该会命中您的断点。

有关其他想法,请参阅FireBreath 调试插件页面。

于 2013-05-31T15:27:23.020 回答
0

您可以直接调试 Mozilla 进程。只需附加到该过程。但是,现代浏览器使用单独的进程来加载第三方插件,因此您必须附加到该进程。你可以设置断点来加载例程(NP_GetEntryPoints, NP_Initialize),看看那里发生了什么。

此外,如果您在附加到进程时遇到问题,您可以简单地从您的代码中显示调试对话框并缩小问题区域。

更新 1:

浏览器似乎不知道它应该使用该插件。您是否指定了插件的 MIME 类型?如果是这样,请在 HTML 页面中运行以下脚本:

   <embed type="application/x-my-extension" id="pluginId">
   <script>
    var plugin = document.getElementById("pluginId");
    var result = plugin.myPluginMethod();  // call a method in your plugin
    console.log("my plugin returned: " + result);
   </script>

x-my-extension替换为您在NP_GetMimeDescription. 您应该检查about:plugins浏览器是否正确注册了您的插件以获得正确的 MIME 类型。 在此处输入图像描述

于 2013-05-31T07:35:21.533 回答