原文地址 http://ibeyond.blog.51cto.com/1988404/1314868php
最近在学习Mac OSX平台下浏览器的插件开发,首先我查看了Xcode的Document关于WebKit的Plugins的介绍,却看到苹果有以下的Note:Beginning in OS X v10.7, Safari does not support WebKit plug-ins because they are not compatible with the new process architecture. Going forward, you must convert WebKit plug-ins to Netscape-style plug-ins or Safari Extensions.html
也就是说在10.7以后,Safari已经再也不支持经过WebKit的Plugins的接口编写的插件了,若是须要编写插件,就必须转向使用NPAPI了,可是网络上关于NPAPI的文档却少得可怜,通过在Google、stackoverflow,github反复搜索,最终发现Mozila的官方wiki是一个不错的学习入口:https://wiki.mozilla.org/NPAPI.git
NPAPI就是Netscape Plugin Application Programming Interface的缩写,Netscape应该你们都不陌生吧,曾经的浏览器鼻祖,虽然Netscape早已离咱们而去,但Netscape不少技术却被保留了下来(尤为是Mozila),在各主流的浏览器中都得以实现,其中就包括NPAPI这套接口。github
NPAPI是一套用C语言编写的跨平台的浏览器插件接口,因此对NPAPI的学习也是很是有意义的,好比在Mac OSX平台上面利用NPAPI编写的插件,就能够在Safari、Chrome、FireFox中同时使用。NPAPI式的插件环境容许插件访问的脚本语言,如JavaScript。它可让脚本语言来访问和控制元素。api
目前不少主流的浏览器插件都是NPAPI接口来实现的,好比Adobe Reader、QuickTime,利用NPAPI编写插件,可使用C/C++,但若是咱们仅仅只须要在Mac OSX环境下运行,使用Objective-C也是没有任何问题的。另外NPAPI的插件开发也有不少有名的开发框架,如Firebreath(github:https://github.com/firebreath/FireBreath), JUCE(官网地址:http://www.rawmaterialsoftware.com/juce.php),QtBrowserPlugin(地址:http://doc.qt.nokia.com/solutions/4/qtbrowserplugin/developingplugins.html),固然为了学习NPAPI的接口使用,推荐直接使用NAAPI的接口从零开始编写本身的插件,咱们将在下一篇文章中动手编写一个本身的浏览器插件。浏览器
附1:插件与扩展的差别(部分参考于Google的搜索结果)网络
插件(Plugins):在浏览器中,插件的功能就是将第三方的库提供的功能经过embed,object标签在页面中应用起来,好比Flash插件,Silverlight插件,Quicktime插件。这些插件就像驱动程序同样,使得你的浏览器能够调用本地方法,系统的接口,实现浏览器没法独立实现的功能,或者这么讲,插件使得别的程序才能处理的内容在浏览器的页面中得以展示和处理。框架
扩展(Extensions or Add-ones):扩展一般是经过程序自身所开放的api来实现的用于扩展程序自身功能的东西,在浏览器中,好比Firefox的Firebug,浏览器的Twitter的插件,这些插件不少都是增长一些浏览器上的窗口或者按钮,来扩展浏览器的功能。这里有一点须要说明一下,扩展自己能够包含一个或者多个插件,可是插件不包含扩展。学习
附2:Apple关于NPAPI的插件的示例:NPAPI_Core_Animation_Movie_Pluginui