原文地址 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