plugin

plugin

Plugin(Plug-in,addin,add-in,addon或add-on)是一種計算機應用程式,它和主應用程式(host application)互相互動,以提供特定的功能。應用程式支持Plugin有許多原因,一些主要原因包括:使得第三方開發者有能力擴展應用程式,以提供無法先期預料的特色;減小應用程式的大小;由於軟體著作權之間的不兼容性將原始碼和應用程式分享。

支持軟體

Plugin 通常譯作外掛程式,下文中以外掛程式代替Plugin。

支持外掛程式的軟體例如有:

Email客戶端 使用外掛程式對email編碼、解碼

圖像軟體 使用外掛程式對檔案格式進行支持和處理圖像(Adobe Photoshop,AcdSee)

媒體播放器 使用外掛程式支持檔案格式和套用過濾器(foobar2000,GStreamer,Quintessential,VST,Winamp,XMMS,WindowsMediaPlayer)

包嗅探器 使用外掛程式對包的格式進行解碼 (OmniPeek)

遙感套用 使用外掛程式處理不同類型感測器的數據(Opticks)

軟體開發環境 使用外掛程式支持不同的程式語言(Eclipse,NetBeans,jEdit,MonoDevelop)

Web瀏覽器 使用外掛程式播放視頻和媒體格式(Flash,QuickTime)

blog套用平台 使用外掛程式增強blog功能(WordPress,LightPress,MovableType,Z-Blog)

blog終端 使用外掛程式增加blog編輯功能(Windows Live Writer)

檔案編輯器 使用外掛程式提供特定的文本編輯能力(Emeditor,Notepad++)

編譯任務管理軟體 使用外掛程式提供第三方語言支持或編譯任務支持(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>

相關詞條

相關搜尋

熱門詞條

聯絡我們