NPAPI就是Netscape Plugin Application Programming Interface的缩写,Netscape应该大家都不陌生吧,曾经的浏览器鼻祖,虽然Netscape早已离我们而去,但Netscape很多技术却被保留了下来(尤其是Mozila),在各主流的浏览器中都得以实现,其中就包括NPAPI这套接口。
NPAPI是一套用C语言编写的跨平台的浏览器插件接口,所以对NPAPI的学习也是非常有意义的,比如在Mac OSX平台上面利用NPAPI编写的插件,就可以在Safari、Chrome、FireFox中同时使用。NPAPI式的插件环境允许插件访问的脚本语言,如JavaScript。它可以让脚本语言来访问和控制元素。
插件与扩展的差异(部分参考于Google的搜索结果)
插件(Plugins):在浏览器中,插件的功能就是将第三方的库提供的功能通过embed,object标签在页面中应用起来,比如Flash插件,Silverlight插件,Quicktime插件。这些插件就像驱动程序一样,使得你的浏览器可以调用本地方法,系统的接口,实现浏览器无法独立实现的功能,或者这么讲,插件使得别的程序才能处理的内容在浏览器的页面中得以展现和处理。
扩展(Extensions or Add-ones):扩展通常是通过程序自身所开放的api来实现的用于扩展程序自身功能的东西,在浏览器中,比如Firefox的Firebug,浏览器的Twitter的插件,这些插件很多都是增加一些浏览器上的窗口或者按钮,来扩展浏览器的功能。这里有一点需要说明一下,扩展本身可以包含一个或者多个插件,但是插件不包含扩展。
附2:Apple关于NPAPI的插件的示例:NPAPI_Core_Animation_Movie_Plugin
代码实现:
插件要与浏览器进行通信,所以必须实现以下的接口:
|
|
NP_Initialize是插件实例化时将浏览器的结构体指针(NPNetscapeFuncs*)传递给插件的方法,NP_GetEntryPoints方法是用于浏览器取得插件的结构体指针(NPPluginFuncs*),NS_Shutdown是指当插件关闭时调用的方法。
以下是接口的实现:
|