前两年做了一个浏览器的插件,当时资料很难找到,只有看Firefox源码里面的例子,反复测试使用例子,才按例子的模式把功能做出来。
需要的头文件: npapi.h npfunctions.h
代码文件:
np_entry.cpp
主要实现几个函数:
NPP_GetMIMEDescription :mimetype类型描述 浏览器根据这个值来查找插件
NP_GetEntryPoints :插件函数列表 规定的一系列函数,NPP_开头 放在下面的npp_gate.cpp 插件提供给浏览器能使用的函数功能
NP_Initialize : 初始化信息, Windows 上面 NP_GetEntryPoints NP_Initialize(一个参数), 一起使用,unix Linux 上面只调用NP_Initialize(两个参数)
NP_Shutdown :插件关闭时调用
NP_GetValue :
NP_GetPluginVersion :插件版本
npp_gate.cpp 插件提供给浏览器能使用的函数功能
把例子文件拷贝过来,只要修改几个函数就可以
char* NPP_GetMIMEDescription(void)
{
return "application/x-xxxx-npblos"; //mimeytype类型
}
NPError NPP_New(NPMIMEType pluginType,
NPP instance,
uint16_t mode,
int16_t argc,
char* argn[],
char* argv[],
NPSavedData* saved)
{
if(instance == NULL)
return NPERR_INVALID_INSTANCE_ERROR;
NPError rv = NPERR_NO_ERROR;
//
PluginObject *obj = NULL;
//创建一个自定义的插件对象
obj = static_cast<PluginObject*>( (void *)NPN_CreateObject( instance, getPluginClass() ) );
if( obj == NULL )
return NPERR_OUT_OF_MEMORY_ERROR;
//
instance->pdata = (void *)obj;
return rv;
}
npn_gate.cpp 浏览器提供的 供插件使用的功能
不用修改。
plugin.cpp 实现插件功能的主要文件
NPClass *getPluginClass(void); 返回插件对象的函数集合
static NPClass pluginClass = {
NP_CLASS_STRUCT_VERSION,
pluginAllocate,
pluginDeallocate,
pluginInvalidate,
pluginHasMethod,
pluginInvoke,
pluginInvokeDefault,
pluginHasProperty,
pluginGetProperty,
pluginSetProperty,
pluginRemoveProperty,
pluginEnumerate
};
NPClass *getPluginClass(void)
{
return &pluginClass;
}
上面的函数都要实现。
具体看example吧。
第一次写博客,很慢,不熟练。做个记录吧。