2013-05-31 53 views
1

我已经成功地编译并创建了MS基于mozilla npruntime项目的npapi dll。参考文献:https://developer.mozilla.org/en-US/docs/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio。 启动mozilla并打开about:插件显示插件。但是当我打开“test.html”插件不会出现。我有一个单独的测试应用程序,我可以通过 NP_INIT l_pInit =(NP_INIT)GetProcAddress(hModule,“NP_Initialize”)来访问入口点函数,以测试dll。 和我能够进入我的插件DLL函数。NPAPI mozilla插件加载问题

但与mozilla它不起作用。请建议。

+0

如果它不显示在about:plugins(是否?)您可能会丢失资源文件条目,或者它们可能不正确(例如[使用错误的区域设置](http://stackoverflow.com/questions)/13859882/NPAPI-插件 - 不 - 不得到加载功能于火狐))。 –

回答

0

您可以直接调试mozilla进程。只需附加到过程。但是,现代浏览器使用单独的进程来加载第三方插件,因此您必须附加到该进程。比你可以设置断点加载例程(NP_GetEntryPoints,NP_Initialize),看看那里发生了什么。另外,如果您在附加进程时遇到问题,您可以直接在代码中显示调试对话框,并缩小问题区域。

更新1:

这似乎是浏览器n要知道它应该使用的插件。你是否指定了插件的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

+0

Mozilla具有加载插件的plugin-container.exe。但是当我运行mozilla浏览器时,我看不到它在进程列表中运行。附加到firefox.exe不会工作,也不会通过VS中的命令和参数选项进行调试。调试消息在使用我的测试应用程序时出现,但不与mozilla一起使用。 – manav

0

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

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

查看FireBreath Debugging Plugins页面的其他想法。

+0

谢谢,这个调试技巧为我工作 – manav

0

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