我已经基于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它不起作用。请建议。
答案 0 :(得分:0)
您可以直接调试mozilla进程。只需附上该流程即可。但是,现代浏览器使用单独的进程来加载第三方插件,因此您必须附加到该进程。您可以将断点设置为加载例程(NP_GetEntryPoints
,NP_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:plugins
。
答案 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。 最后我开始了,谢谢大家的支持。