摘要:本文主要針目前編寫支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)過于復雜,而提出的一種支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)方法,針對現(xiàn)在缺陷,本文將給出一種通用的支持所有瀏覽器的客戶端功能擴展組件的技術框架,不依賴于瀏覽器本身的插件技術,同時也可以無限擴展組件的功能,有效低降低Internet上發(fā)布跨瀏覽器插件的成本。
關鍵詞:瀏覽器擴展;WEB應用
引言
在管理信息系統(tǒng)開發(fā)中,B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務器結(jié)構(gòu)的模式越來越流行。它是隨著Internet技術的興起,對C/S結(jié)構(gòu)的一種變化或者改進的結(jié)構(gòu)。B/S結(jié)構(gòu)的優(yōu)點:具有分布性特點,可以隨時隨地進行查詢、瀏覽等業(yè)務處理,業(yè)務擴展簡單方便,通過增加網(wǎng)頁即可增加服務器功能,維護簡單方便,只需要改變網(wǎng)頁,即可實現(xiàn)所有用戶的同步更新,開發(fā)簡單,共享性強。
但B/S 模式也有一些缺點:各瀏覽器標準不一樣,安全性高,網(wǎng)頁在瀏覽器設置的“沙箱”內(nèi)運行,功能有限制,難以實現(xiàn)傳統(tǒng)模式下的特殊功能要求。
1 技術現(xiàn)狀
目前主要的瀏覽器主要有:微軟公司傳統(tǒng)IE瀏覽器和WIN10新發(fā)布的EDGE新型瀏覽器、網(wǎng)景公司FireFox和Google Chrome瀏覽器,各瀏覽器實現(xiàn)的插件技術不一樣,微軟公司IE瀏覽器使用的是COM技術,也稱ActiveX控件技術,用于實現(xiàn)IE瀏覽器功能的擴展,加上數(shù)字簽名技術,在不修改IE安全級別的前提下,可實現(xiàn)功能的擴展,但WIN10新發(fā)布的EDGE瀏覽器已經(jīng)不支持微軟自己的ActiveX控件技術,網(wǎng)景公司FireFox以網(wǎng)景插件應用程序編程接口(NPAPI)技術實現(xiàn)控件擴展, Google Chrome 42以前的版本也支持NPAPI技術,但Chrome新版本已經(jīng)不再支持NPAPI技術,轉(zhuǎn)為使用PPAPI技術。
由于瀏覽器作為軟件界面框架廣泛應用,給用戶帶來方便,同時也帶來了麻煩,發(fā)布支持所有瀏覽器的客戶端擴展功能組件時需要考慮各類瀏覽器使用的技術,需求重復開發(fā)插件功能。發(fā)布應用成本相對較高,效率也低,對經(jīng)常需要修改或擴展功能的客戶端程序維護相對復雜,而且瀏覽器的升級換代也會造成客戶端組件被迫升級。
2 解決思路
針對目前編寫支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)過于復雜,本文提出一種支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)方法。實現(xiàn)一個通用的支持所有瀏覽器的客戶端功能擴展組件的技術框架,使用所有瀏覽器都必須支持的HTTP技術來統(tǒng)一實現(xiàn)客戶端功能擴展,不依賴于瀏覽器本身的插件技術,同時也可以無限擴展組件的功能,有效低降低Internet上發(fā)布跨瀏覽器插件的成本。
提供的支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)方法,是基瀏覽器的HTTP協(xié)議實現(xiàn)的,瀏覽器本身是一個支持HTTP協(xié)議調(diào)用的客戶端,可以發(fā)出標準的HTTP請求,并將請求的返回的HTML顯示在頁面上。
主要思路是在本地操作系統(tǒng)中實現(xiàn)一個輕量級的HTTP服務程序框架,瀏覽器通過HTTP協(xié)議與這個HTTP服務程序交互,通過這個客戶端封裝的Javascript Api, 瀏覽器可以實現(xiàn)與本地HTTP服務程序交互,并可以調(diào)用HTTP服務程序中的擴展功能模塊,實現(xiàn)支持所有瀏覽器的客戶端功能擴展的方法。
3 技術實現(xiàn)
在客戶端開發(fā)一個HTTP服務程序軟件,該軟件以操作系統(tǒng)服務形式安裝 ,如WINDOW操作系統(tǒng)下為window Services并運行在session0/system用戶權(quán)限中,在LINUX操作系統(tǒng)下為etc/init.d。
安裝到客戶端的本地輕量的HTTP服務軟件,可以采用操作系統(tǒng)服務的方式安裝,自啟動的方式,這個軟件各種開發(fā)語言都很容易實現(xiàn),技術上有可行性,開發(fā)難度也不大,主要的設計要包括:插件式的框架,可加載外部的模塊,實現(xiàn)功能的擴展,將功能的接口統(tǒng)一標準化,輸入與輸出采用與頁面一樣的JSON或XML標準,可判斷本地插件模塊的版并下載更新。
提供瀏覽器與本地HTTP服務程序交互的API,瀏覽器通過標準的HTTP訪問技術與HTTP服務器交互,因本地HTTP服務與WEB應用本身的遠程服務器不可能在同一個網(wǎng)絡域,可以通過所有瀏覽器都支持的標準script標簽解決HTTP跨域訪問的問題,JS的API庫的封裝,瀏覽器頁面是采用JS與本擴展功能交互的,因為跨域問題,無法直接采用AJAX的異步方式調(diào)用,但可以采用標準script標簽來發(fā)出HTTP請求,可將訪問的方式用JS封裝,提供頁面調(diào)用的API。一般包括以下幾個接口:
a) Init: 初始化服務DLL,主要實現(xiàn)注冊服務接口的初始化,
b) Exec: 調(diào)用當前服務DLL下的功能函數(shù),如以下形式:
1. Exec(String funName,StringBuffer inParams) return StringBuffer;
2. 輸入?yún)?shù)區(qū):inParams 將調(diào)用該功能的所有參數(shù)傳入,參數(shù)區(qū)實現(xiàn)也是采用JSON串如:{param1:val1,param2:val2,……}
c) Exit: 卸載服務
d) Call: 該服務是一個代理服務,內(nèi)部調(diào)用Init/Exec/Exit獨立完成一次功能調(diào)用,參數(shù)與Exec相同
具體功能的插件,建議以DLL的模塊方式,可動態(tài)加載,并靈活擴展,當然也可以根據(jù)HTTP服務軟件的技術體制,設計插件的具體形式,本地機器上的擴展功能通過開發(fā)功能DLL(動態(tài)連接庫模塊),可將DLL放入WEB應用遠程服務器,本地的HTTP服務器在調(diào)用時將該DLL下載到本地進行調(diào)用,如果本地版本與服務器版本不一致,將重新更新本地的服務DLL.
當用戶使用頁面交互功能時,程序頁面通過提供的API方法CallExtension(‘模塊名稱,函數(shù)名稱),該方法按功能模塊的DLL名稱來調(diào)用具體該模塊中的功能函數(shù)。
本地HTTP服務程序加載服務DLL,然后根據(jù)功能名稱查找到服務DLL中的功能函數(shù),并將服務DLL中的功能函數(shù)接口模式進行了統(tǒng)一的規(guī)范,所有的功能函數(shù)都使用簡單的IPO(輸入緩存區(qū)-處理-輸出緩存區(qū))定義,將輸入?yún)?shù)設置入輸入緩存區(qū),進行統(tǒng)一的調(diào)用處理后,將結(jié)果輸出到輸出緩存區(qū)。
4 結(jié)束語
本文提供支持所有瀏覽器的客戶端功能擴展組件的實現(xiàn)方法,在不修改代理框架的情況下,可以無限擴展組件的功能,有效代替目前Internet上發(fā)布跨瀏覽器插件。實現(xiàn)一種本地HTTP WEB服務器的技術,將瀏覽器控件以提供的功能轉(zhuǎn)化為服務,并將服務功能獨立與瀏覽器本身,使用DLL(動態(tài)連接庫)技術實現(xiàn)擴展的具體功能實現(xiàn)。國為使用HTTP協(xié)議交互,所以支持所有當前的瀏覽器技術,可以無限擴展組件的功能,有效代替目前Internet上發(fā)布跨瀏覽器插件。
(作者單位:南京萊斯信息技術股份有限公司)
作者簡介:蘇祖輝(1978- ) ,男 ,本科,技術專家,工程師 ,主要研究方向為計算機系統(tǒng)架構(gòu)應用。