我也是StackOverflow和QtWebkit的新手。
我编写了一个非常基本的Npapi插件,其中包含NP_GetMimeTypeDescription
和Np_Initialise
等功能,用于Mimetype application/basic-plugin
和Mimetype描述application/basic-plugin:bsc:Plug-ins SDK sample
。
但我在QtWebKit和Mozilla Firefox的demobrowser上加载它时遇到了问题。我已将生成的.so文件放在浏览器找到/usr/lib/mozilla/plugins/
和Qt Lib路径等插件的路径中。
我有一个包含Mimetype application/basic-plugin
的test.html文件。我试图在Mozilla浏览器和QtWebKit演示浏览器中启动此插件但在这两种情况下都没有启动插件。
我无法找出原因。 任何建议都是欢迎...
答案 0 :(得分:1)
感谢您的帮助和建议 我能够找出为什么我的插件没有被调用的问题, 即使我将.so文件放在正确的文件夹中 / usr / lib / mozilla / plugins /和Qt Lib path。
有两个原因......
必须在编译期间将Define XP_UNIX(-DXP_UNIX)作为编译器指令启用。 这将考虑功能的不同原型以及实现
extern "C"
NPError OSCALL NP_Initialize(NPNetscapeFuncs *browserFuncs
#ifdef XP_UNIX
, NPPluginFuncs *pluginFuncs
#endif
)
{
// keep a pointer to the browser functions
g_browser = browserFuncs;
// any memory that is to be shared by all instances of
the browser plugin should be initialized here.
;
#ifdef XP_UNIX
// under Linux, as the browser won't call NP_GetEntryPoints()
explicitly, do it now to fill in <pluginFuncs>
return NP_GetEntryPoints(pluginFuncs);
#else
return NPERR_NO_ERROR;
#endif
}
和
extern "C"
#ifdef XP_UNIX
NPError NP_GetValue(void* instance, NPPVariable variable, void *value)
#else
NPError NP_GetValue(NPP instance, NPPVariable variable, void *value)
#endif
2 ..有2个函数NP_GetValue和NPP_GetValue。
extern "C"
NPError NP_GetValue(void* instance, NPPVariable variable, void *value);
和
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *ret_value);
NPP_GetValue是一个插件函数,应该在其中进行注册 NP_GetEntryPoints
extern "C"
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* NPPluginFuncsptr)
{
......
NPPluginFuncsptr->newp = NPP_New;
NPPluginFuncsptr->getvalue = NPP_GetValue;
NPPluginFuncsptr->setvalue = NPP_SetValue;
return NPERR_NO_ERROR;
}
在我的代码中,仅实现了NP_GetValue,并且未实现NPP_GetValue。 所以NPP_GetValue在.so中是未定义的,因为它没有加载.so。
在实现NPP_GetValue函数时,此函数已在.so文件中定义并导出,并能够成功加载。
从浏览器到插件调用函数的顺序如下......
NP_Initialize - &gt;浏览器首先调用初始化函数。 (在Linux的情况下,应该通过调用导出插件函数集 NP_GetEntryPoints explicity由于浏览器不会调用GetEntryPoints)
NP_GetEntryPoints - &gt;从NP_Initialize for Linux中明确调用 公开/导出插件函数。
NP_GetValue变量:1 - &gt;从浏览器调用以获取插件名称 (NPPVpluginNameString)
NP_GetValue变量:2 - &gt;从浏览器调用来获取 插件描述(NPPVpluginDescriptionString)
NP_GetMimeDescription - &gt;从浏览器调用以获取MimeType描述 (此函数应返回Mime类型描述 例如: return(“application / basic-plugin:bsc:Plug-ins SDK sample”);)
NPP_New - &gt;从浏览器调用以创建插件实例。
NPP_GetValue PLUGIN:main.cpp,NPP_GetValue,446ENTRY - &gt;从浏览器调用以获取插件特定数据...
...
请注意,将调用上述序列中的下一个函数 IF和ONLY如果上一个函数调用返回成功。: - )