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