支持軟體
Plugin 通常譯作
外掛程式,下文中以外掛程式代替Plugin。
支持外掛程式的軟體例如有:
Email客戶端 使用外掛程式對email編碼、解碼
圖像軟體 使用外掛程式對檔案格式進行支持和處理圖像(Adobe Photoshop,AcdSee)
媒體播放器 使用外掛程式支持檔案格式和套用過濾器(foobar2000,GStreamer,Quintessential,VST,Winamp,XMMS,WindowsMediaPlayer)
包
嗅探器 使用外掛程式對包的格式進行解碼 (OmniPeek)
遙感套用 使用
外掛程式處理不同類型感測器的數據(Opticks)
Web瀏覽器 使用外掛程式播放視頻和媒體格式(Flash,QuickTime)
blog套用平台 使用外掛程式增強blog功能(WordPress,LightPress,MovableType,
Z-Blog)
blog終端 使用外掛程式增加blog編輯功能(Windows Live Writer)
編譯任務管理軟體 使用
外掛程式提供第三方語言支持或編譯任務支持(Ant)
企業Web套用平台 使用外掛程式針對不同業務進行處理(Struts)
機制
主應用程式提供給
外掛程式可以使用的服務,讓外掛程式在主應用程式中註冊外掛程式本身,以及和外掛程式進行數據交換的協定。外掛程式依賴於主應用程式提供的這些服務,通常不能獨立運行。相反地,主應用程式和外掛程式是分離的,這就使得我們可以不改變主應用程式而動態增加或更新外掛程式。
公開的
應用程式接口(API)提供一個標準接口,允許第三方編寫外掛程式和主應用程式互動。一個穩定的API必須在主應用程式版本升級後第三方外掛程式仍可以運行。外掛程式同時也延長了過時的應用程式的生命。Adobe Photoshop 和 After Effects 提供給外掛程式的API已經成為一種
圖像處理軟體API的標準,被相類的圖像處理軟體所採納。其它類似的API包括 Audio Units 和VST。
這種
外掛程式的機制很普遍,比如一個
網路交換器,它有一個沒被占用而且是非標準的連線埠,用它來接納不同的任意的物理層連線;再比如
計算機硬體製造業的行業標準架構(Industry Standard Architecture)和IBM著名的微通道架構(Micro Channel Architecture),都允許第三方設備。這些都是類似外掛程式的一種機制。
外掛程式和擴展
外掛程式稍不同於擴展(extension),外掛程式通常依賴於主應用程式的接口,有一個它們可以運行的確定的界限。擴展則通常有更少的限制,也可以提供它們自己的接口。相同的是,它們通常都用來減少主應用程式的大小、提供一些可選的功能。
這裡不得不提到Mozilla Firefox 和相關軟體。它們使用一個叫做Add-on的名詞,Add-on又被細分為外掛程式、主題(theme)、搜尋引擎(search engine)和擴展。在以後的文章中將會提到Mozilla外掛程式和古老的NPAPI的淵源,以及firefox中外掛程式和擴展的區別。
歷史淵源
外掛程式的概念可以回朔到上世紀70年代。那時在Univac 90/60系列主機的Unisys VS/9 作業系統中,運行著一個叫 EDT 的
文本編輯器,它提供一種功能可以從編輯器中運行其它應用程式,並允許這些程式訪問編輯器的
緩衝區,在記憶體中提供一種編輯會話。這樣這些外來的應用程式就可以依靠共享的緩衝區執行文本操作了。這種功能後來被 Waterloo Fortran
編譯器使用,和EDT編輯的Fortran程式進行互動編譯。
在PC機上擁有外掛程式功能的第一個軟體可能是在Macintosh上的HyperCard和QuarkXPress,它們在1987年發布。1988年,Silicon Beach軟體公司在 Digital Darkroom和SuperPaint軟體中也包含了
外掛程式功能。而Plug-in 這個名詞則是被Ed Bomke提出。
Plugin 架構
以下按程式語言分類
plugin 下包含有c++和jsp語法兩種語言分類
C++
FxEngine Framework - 一個數據流處理框架
Qt PlugIns - TrollTech的 Qt 框架的一部分
Delphi
TMS Plugin Framework
Java
Java Plug-in Framework (JPF),一種由Eclipse的
外掛程式機制而改寫的架構
RCP,由Eclipse發展而來的技術平台,應用程式可以以外掛程式方式編寫,應用程式本身也可以擁有外掛程式
Python
Setuptools
The Twisted Plugin System
Sprinkles
Python plugin system
.NET
AL Platform
Mono Addins - .Net和Mono的一個addin框架
Code Project 基於.NET的
外掛程式框架
Active Visic
Active Visic
JSP 語法
<jsp:plugin>
執行一個applet或Bean,有可能的話還要下載一個Java
外掛程式用於執行它.
JSP 語法
<jsp:plugin
type="bean | applet"
code="classFileName"
codebase="classFileDirectoryName"
[ name="instanceName" ]
[ archive="URIToArchive,..." ]
[ align="bottom | top | middle | left | right" ]
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[ <jsp:params>
[ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
例子
<jsp:plugin type=applet code="Molecule.class" codebase="/html">
<jsp:params>
<jsp:param name="molecule" value="molecules/benzene.mol" />
</jsp:params>
<jsp:fallback>
<p>Unable to load applet</p>
</jsp:fallback>
</jsp:plugin>
描述
<jsp:plugin>;元素用於在瀏覽器中播放或顯示一個對象(典型的就是applet和Bean),而這種顯示需要在瀏覽器的java
外掛程式。
當Jsp檔案被編譯,送往瀏覽器時,<jsp:plugin>;元素將會根據瀏覽器的版本替換成<object>;或者<embed>;元素。注意,<object>;用於HTML 4.0 ,<embed>;用於HTML 3.2.
一般來說,<jsp:plugin>;元素會指定對象是Applet還是Bean,同樣也會指定class的名字,還有位置,另外還會指定將從哪裡下載這個Java外掛程式。具體如下:
屬性
type="bean | applet"
.將被執行的
外掛程式對象的類型,你必須得指定這個是Bean還是applet,因為這個屬性沒有預設值.
code="classFileName"
將會被Java外掛程式執行的Java Class的名字,必須以.class結尾。這個檔案必須存在於codebase屬性指定的目錄中.
codebase="classFileDirectoryName"
將會被執行的Java Class檔案的目錄(或者是路徑),如果你沒有提供此屬性,那么使用<jsp:plugin>;的jsp檔案的目錄將會被使用.
name="instanceName"
這個Bean或applet實例的名字,它將會在Jsp其它的地方調用.
archive="URIToArchive,..."
一些由逗號分開的路徑名,這些路徑名用於預裝一些將要使用的class,這會提高applet的性能.
align="bottom | top | middle | left | right"
圖形,對象,Applet的位置,有以下值:
bottom
top
middle
left
right
height="displayPixels" width="displayPixels"
Applet或Bean將要顯示的長寬的值,此值為數字,單位為象素.
hspace="leftRightPixels" vspace="topBottomPixels"
Applet或Bean顯示時在螢幕左右,上下所需留下的空間,單位為象素.
jreversion="JREVersionNumber | 1.1"
Applet或Bean運行所需的Java Runtime Environment (JRE) 的版本. 預設值是 1.1.
nspluginurl="URLToPlugin"
Netscape Navigator用戶能夠使用的JRE的下載地址,此值為一個標準的URL。
iepluginurl="URLToPlugin"
IE用戶能夠使用的JRE的下載地址,此值為一個標準的URL。
<jsp:params> [ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+ </jsp:params>
你需要向applet或Bean傳送的參數或參數值。
<jsp:fallback> text message for user </jsp:fallback>