npapi 火狐插件开发-专题篇-NPN_PluginThreadAsyncCall

最近做一个项目,用到了NPN_PluginThreadAsyncCall,但是网上这方面的资料比较少,自己经过大量的搜寻与测试,终于搞定!

NPN_PluginThreadAsyncCall 这个可以实现插件主动调用js函数,在插件加载运行后,如果是不定时的需要给js页面传递数据,此函数效果不错!

现将这个函数的用法做个总结!

1)在 np_entry.cpp文件中的方法NP_Initialize
添加 NPNFuncs.pluginthreadasynccall = pFuncs->pluginthreadasynccall;

2)在npn_gate.cpp文件中添加
void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData)
{
NPNFuncs.pluginthreadasynccall(instance, func, userData);
}

3)在plugin.h文件中添加如下代码:

  NPObject *m_pJSCallbackFunObj;//在ScriptablePluginObject::SetProperty中赋值,记得初始化和释放
全局方法:void AsyncCallFunc(void* pParm);
添加CPlugin方法:void CallAsyncCallFunc();

4)在plugin.cpp文件中添加全局方法
void AsyncCallFunc(void* pParm)
{
CPlugin* pTemp = reinterpret_cast<CPlugin*>(pParm);
if (pParm == 0)
{
return;
}
pTemp->CallJsFunc(111);//具体的调用js的方法!
}

5)调用js的方法

bool CPlugin::CallJsFunc(int nvalue)
{
if (!m_pJSCallbackFunObj)
{
NPVariant args[1];
NPVariant rev;
INT32_TO_NPVARIANT(nvalue,args[0]);
NPVariant result;
NPN_InvokeDefault(m_pNPInstance, m_pJSCallbackFunObj, args, 1, &result);//m_pJSCallbackFunObj 自定义的NPObject * 类型的js函数指针,自己赋值
NPN_ReleaseVariantValue(&result);
}
return true;
}



6)实现类方法
void CPlugin::CallAsyncCallFunc()
{
NPN_PluginThreadAsyncCall(m_pNPInstance, &AsyncCallFunc, this);
}

7)在插件的注册的回调的函数中或者是新建的线程里, 调用CallAsyncCallFunc方法即可。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值