NPAPI mozilla插件加载问题

时间:2013-05-31 07:22:45

标签: npapi browser-plugin

我已经基于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它不起作用。请建议。

3 个答案:

答案 0 :(得分:0)

您可以直接调试mozilla进程。只需附上该流程即可。但是,现代浏览器使用单独的进程来加载第三方插件,因此您必须附加到该进程。您可以将断点设置为加载例程(NP_GetEntryPointsNP_Initialize)并查看其中发生的情况。

此外,如果您无法附加到流程,只需在代码中显示调试对话框并缩小问题范围。

更新1:

似乎浏览器不知道应该使用该插件。您是否指定了插件所用的hwat的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中使用的扩展程序。如果浏览器正确注册了您的插件以获取正确的MIME类型,您可以检查about:pluginsenter image description here

答案 1 :(得分:0)

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

另一个技巧是转到about:config并找到插件ipc设置并禁用它们;那么你可以附加到主要的firefox进程,如果它们被调用它应该打到你的断点。

有关其他想法,请参阅FireBreath Debugging Plugins页面。

答案 2 :(得分:0)

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