NPAPI和PPAPI开发
Author: kagula
Revison: 1Last modify date:2015-10-20
环境:
[1]Visual Studio 2010 SP1Visaul Stuio 2013 Update4
[2]Python2.7
[3]Firefox 41.0.1
[4]IE 11
[5]Google chrome 45.0.2454.101
[6]Opera 32.0
[7]360浏览器 7.1.1.808
[8]nacl sdk pepper39
[9]windows7 SP1 64bits
关键词
Firebreath, NPAPI, PPAPI, Web worker, Messaging System, Native Client Module, Application StructureChrome Web Store, portable executable file, architecture-specific executable file
前言
如果要实现Windows平台,跨不同浏览器插件,就需要分别实现ActiveX 适用浏览器IE11,因为IE11对FireBreath兼容性不是很好。
FreBreath(NPAPI) 适用浏览器,360浏览器,Chrome 42版本以下,Opera、Firefox。
NaCl(可分为PPAPI、NaCl、PNaCl三个等级) 适用浏览器Chrome 42版本或以上。
ActiveX的baidu上很多,但是NPAPI和PPAPI的很不完善,所以这里仅仅介绍NPAPI和PPAPI的开发。
第一部份:NPAPI
第一个插件(NPAPI):
firebreath是个跨浏览器插件开发工具,所以先尝试FireBreath。
Step1:
参考资料[3]下载firebreath最新稳定版本,并解压到“D:\SDK\firebreath-FireBreath-105dcc6\”目录下
从官网上下载firebreath-boost-1.50.0.zip
位置参考下面摆放:
<FB_ROOT>/src/3rdParty/boost/boost/
<FB_ROOT>/src/3rdParty/boost/libs/
Step2:先建一个Hello工程。
打开控制台,切换到“D:\SDK\firebreath-FireBreath-105dcc6”文件夹,
输入命令“python fbgen.py”根据提示输入你第一个工程plugin name,plugin description,company name等信息。
命令执行完毕后,再调用“prep2010.cmd”命令。
python就在当前build子目录下建好了VS2010 solution,FireBreath.sln文件。
打开sln后应该就能正确编译。如果有问题参考资料[1]。
Step3:测试插件是否正确加载。
[S3-1]IE下运行插件。
命令行方式转到“D:\SDK\firebreath-FireBreath-105dcc6\build\bin\hello\Debug”路径下,使用“regsvr32 nphello.dll”注册控件。
"D:\SDK\firebreath-FireBreath-105dcc6\build\projects\hello\gen"路径下打开“FBControl.htm”文件,就可以在IE中正常运行hello控件。
如果有问题,参考资料[2]。
[S3-2]Firefox下运行插件
我是把dll复制到“C:\Users\kagula\AppData\Roaming\Mozilla\Firefox\Profiles\ie1ypj6h.default\plugins”路径就Ok了,如果没有“plugins”目录就新建一个。
不同的计算机Win7下,参考下面的格式就Ok了。
“C:\Users\XXX\AppData\Roaming\Mozilla\Firefox\Profiles\XXX.default\plugins”
[S3-3]Chrome下运行
Chrome 45 不支持NPAPI。
[S3-4]Opera下运行
使用“regsvr32 nphello.dll”注册控件后,可以直接使用,
但是会提示“此网站使用的插件很快将不被支持”
[S3-5]360浏览器下运行
使用“regsvr32 nphello.dll”注册控件后,可以直接使用,
Step4:测试插件功能是否正常
[1]hello.cpp的FB::JSAPIPtr hello::createJSAPI()函数,创建了helloAPI实例返回。
查看helloAPI实现,
echo方法用来示例参数传递,testEvent方法示例事件回调,testString和version示例如何存取对象的属性。
[2]FBControl.htm文件,点击“Fire a test event”会间接调用helloAPI实例的testEvent方法,这个方法又会激活JS的test事件。
在IE中没有反应,但是在Opera和360浏览器中测试正常。
[3]FBControl.htm文件,点击“Activate click counter”,就多一次对插件echo事件的绑定。
然后,再点击“Click me!”,JS会调用插件的echo方法,而插件的echo方法会调用js对echo事件的绑定function。
在IE中依旧没有反应。
[4]测试插件属性的存取,
[S4-1]为FBControl.htm文件,添加