firefox NPAPI 插件开发(c++)-插件与JS的交互(三)

NPAPI标准提供了一套插件与JS的交互机制。

1. javascript调用插件方法:  浏览器首先会调用NPP_GetValue(NPP instance, NPPVariable variable, void* value)取得NPObject对象的地址。Variable参数为NPPVpluginScriptableNPObject。在取得该对象后浏览器就可以调用插件提供的NPClass函数。最主要的函数有下面几个: pluginHasMethod :询问插件是否支持某一js方法。 pluginHasProperty :询问插件是否具有某一属性 pluginInvoke :     当插件支持某一方法时,浏览器将会调用该函数执行插件为js提供的这一方法。那么对于提供的很多方法插件如何在该函数内区分。分析这个函数: pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result); obj是插件里的NPObject对象地址。 Name表示插件提供方法的名字,通过对比这个参数来区分插件提供的不同方法。 args和argcount分别表示js传来的参数地址和参数个数。 result是函数返回给js的结果。

2. 插件调用js内部的回调函数:  Js可以通过2种方式为插件设置回调函数。示例如下: <script language=javascript> Plugin.Onfun = fun;//方式一  通过设置插件属性传入回调函数地址 Plugin.Onfun(fun);//方式二   通过调用插件函数传入回调函数地址 Function fun(){} </script>

在插件内部,当js函数地址传到插件时,浏览器把它封装为一个NPObject对象,里面存有函数地址 方式一: 在插件内部,浏览器会调用pluginHasproperty确认插件是否有该属性。如果有然后浏览器调用pluginSetproperty函数。pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant)的第二个参数判断是哪个属性,第三个参数就是NPObject对象地址。

方式二:在插件内部,浏览器会调用pluginHasmethod确定是否支持该方法。然后调用pluginInvoke,这里面的args参数包含了回调函数NPObject地址。 js设置完回调函数后,插件就可以调用该函数了。需要使用NPN_InvokeDefault,示例代码如下: bool bret = gBrowser->invokeDefault(npp, callbackNPObject, &pV, 1, &result);

另外,插件也可以直接调用js中的函数。在插件内部调用浏览器的getUrl函数。具体格式如下: gBrowser->geturl(inst(), “javascript:function()”, "_self"); 如果想传入整数参数,上面函数第二个参数应写成: “javascript:function(“+num+”)”。 如果传入字符串参数,上面函数第二个参数为: “javascript:function(/’“+”string”+”/’)”。如果字符串含有中文,需要进行url encode。
————————————————
版权声明:本文为CSDN博主「Crazy_BigBoy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tgdzsjh/article/details/21447667

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值