NPAPI开发遇到有关问题,求教
NPAPI开发遇到问题,求教
初涉NP,需要个功能,获取页面的URL
请问instance这个实例怎么获取?求代码
------解决方案--------------------
instance是浏览器调用你的NPAPI插件时传进来的。
------解决方案--------------------
npAPI 有两类函数,npn_gate 和 npp_gate,其中 npp 是浏览器调用 plugin 的函数,npn 是 plugin 调用 浏览器的,比如你的 GetUrl 最终就是调用
或者
之类的函数。
但是,在浏览器创建 plugin 的时候,会调用 NPP_New 函数。
你要的 npp 就是 instance 参数,你必须保存这个参数。以便以后使用。
初涉NP,需要个功能,获取页面的URL
BSTR GetURL1(NPP instance)
{
NPObject * pluginObj;
CString m_pSrc;
NPN_GetValue(instance,NPNVPluginElementNPObject,&pluginObj);
NPIdentifier n=NPN_GetStringIdentifier("src");
NPVariant rval;
NPN_GetProperty(npp,pluginObj,n,&rval);
if (NPVARIANT_IS_STRING(rval))
{
m_pSrc=NPVARIANT_TO_STRING(rval).UTF8Characters;
}
else
{
n=NPN_GetStringIdentifier("data");
NPN_GetProperty(npp,pluginObj,n,&rval);
if(NPVARIANT_IS_STRING(rval))
m_pSrc=NPVARIANT_TO_STRING(rval).UTF8Characters;
}
return m_pSrc.AllocSysString();
}
请问instance这个实例怎么获取?求代码
------解决方案--------------------
instance是浏览器调用你的NPAPI插件时传进来的。
------解决方案--------------------
npAPI 有两类函数,npn_gate 和 npp_gate,其中 npp 是浏览器调用 plugin 的函数,npn 是 plugin 调用 浏览器的,比如你的 GetUrl 最终就是调用
NPError NPN_GetURL(NPP instance, const char *url, const char *target);
或者
bool NPN_GetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName, NPVariant *result);
之类的函数。
但是,在浏览器创建 plugin 的时候,会调用 NPP_New 函数。
// here the plugin creates an instance of our CPlugin object which
// will be associated with this newly created plugin instance and
// will do all the neccessary job
NPError NPP_New(NPMIMEType pluginType,
NPP instance,
uint16_t mode,
int16_t argc,
char* argn[],
char* argv[],
NPSavedData* saved)
你要的 npp 就是 instance 参数,你必须保存这个参数。以便以后使用。