网景插件应用程序编程接口(NPAPI, Netscape Plugin Application Programming Interface)是Netscape Navigator、Mozilla Suite、Mozilla SeaMonkey和Mozilla Firefox等Gecko引擎浏览器与Apple Safari和Google Chrome等webkit引擎浏览器所使用的类似ActiveX的插件接口。
为什么使用NPAPI插件?
插件就相当于运行在网页上的应用程序。
比如你想在网页上播放音乐,在网页上使用标签,浏览器会自动调用Windows Media Player运行,又如pdf等。还有,也可以用作在浏览器检测和启动客户端应用程序。
我们通常称为”火狐插件”,真实意思是基于火狐内核的插件,火狐是Gecko引擎,因此基于Gecko引擎的插件开发类似,以下将火狐浏览器称作Gecko。
火狐插件NPAPI,在页面上<embed>标签
对应于IE的ActiveX插件,页面上用<object>标签
NPAPI 原本是由 Netscape 所制定的一组单纯的 C Plugin API,起初是无法支持 Scriptability;于是到了 2004 年底,各家 Browser ( IE , Opera, Mozilla 等) 都同意支持NPRuntime 延伸 API 以支持 Scriptability,所以目前若是想写 Plugin则应该以 NPRuntime API 才能跨不同的 Browsers
尽管这种插件在当时很流行,但自从HTML5出来后似乎就被排挤了。谷歌将会从2014年1月开始禁用大部分的Chrome插件。Mozilla也计划在2013年12月阻挡NPAPI插件的使用.
开发Netscape插件的一般方法
尽管开发netscape插件有不少可用框架。但是开发一个典型的netscape插件主要要做的工作有以下:
1.编写一个动态链接库。 插件的表现形式就是一个动态链接库,所以首先编写一个dll文件或者.so文件供浏览器调用。注意,插件的名称应该以np开头,NPAPI标准的默认规则。
2.添加dll导出接口。 在xx.def文件中添加dll的导出函数,如图
上面导出了三个NP_函数,供浏览器调用。这三个函数的作用前面已经说过,不再细述
3.添加插件的mimetype。首先为插件添加一个.rc文件,注意该资源文件的默认语言应该是英文,简体中文的话浏览器识别不出,然后在.rc文件中添加mimetype属性。
4.实现npapi.h中声明的NPP函数。
5.在Np_GetEntryPoints中将NPP_函数地址赋值给传出参数。
6.在NP_Initialize中保存传入的NPNetscapeFuncs对象指针,供插件后续调用
7.在Np_Shutdown中处理反初始化操作。
8.对NPClass中的函数进行实现